django+drf+vue 简单系统搭建 (4) 用户权限

权限控制是web中的重要组成部分。与以往的博客系统不同,本次工具页面仅支持注册用户。

每个注册用户都能访问到工具页面,并且提交自己的task来选择具体的工具来处理自己提交的文件。每个注册用户都只能访问到自己提交的task,而管理员则可以查看所有task。

1. 权限控制

我们先来设置工具相关页面权限,我们规定只有注册用户才能访问:

全局权限控制

修改setting,添加在installed_apps之后

# settings.py
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES':[
        'rest_framework.permissions.IsAuthenticated',
    ]
}
  • 限制访问:最简单的权限是允许通过身份验证的用户访问,并拒绝未经身份验证的用户访问,这对应于rest_framework中的IsAuthenticated类。

自定义权限控制

在views中添加permissions信息

#simpletool/views.py

from simpletool.permissions import IsAuthenticatedOrAdmin
# Create your views here.

class simpletoolList(generics.ListCreateAPIView):
    queryset = simpleTool.objects.all()
    serializer_class = ToolListSerializer
    permission_classes = [IsAuthenticatedOrAdmin]

class simpletoolDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = simpleTool.objects.all()
    serializer_class = ToolDetailSerializer
    permission_classes = [IsAuthenticatedOrAdmin]

补充permissions.py文件

from rest_framework import permissions

class IsAuthenticatedOrAdmin(permissions.IsAuthenticated):
    def has_permission(self, request, view):
        # 对注册用户开放操作
        # if request.method in permissions.SAFE_METHODS:
        if (request.user.is_authenticated) and (request.method in permissions.SAFE_METHODS): 
            return True
        # 仅管理员可进行其他操作
        return request.user.is_superuser

permission_classes 可以接收一个列表,因此权限控制类可以设置多个,请求必须满足所有控制条件才允许被放行。

现在来让我们看一下直接访问时的状况:

http http://127.0.0.1:8000/api/simpletool/

创建一个普通用户

测试权限

http -a john:123456 http://127.0.0.1:8000/api/simpletool/

测试PUT权限

http -a john:123456 POST http://127.0.0.1:8000/api/simpletool/ title="test_tool"

管理员权限测试

http -a xiaofan0101:123456 POST http://127.0.0.1:8000/api/simpletool/ title="test_tool"
相关推荐
Qhumaing3 分钟前
Python学习——函数参数详解
开发语言·python·学习
Icomi_15 分钟前
【PyTorch】7.自动微分模块:开启神经网络 “进化之门” 的魔法钥匙
c语言·c++·人工智能·pytorch·python·机器学习·计算机视觉
酷爱码17 分钟前
springboot 动态配置定时任务
java·spring boot·后端
计算机-秋大田31 分钟前
基于SpringBoot的美食烹饪互动平台的设计与实现(源码+SQL脚本+LW+部署讲解等)
vue.js·spring boot·后端·课程设计·美食
加油,旭杏1 小时前
【go语言】grpc 快速入门
开发语言·后端·golang
ahardstone1 小时前
【CS61A 2024秋】Python入门课,全过程记录P5(Week8 Inheritance开始,更新于2025/2/2)
开发语言·python
brzhang1 小时前
墙裂推荐一个在 Apple Silicon 上创建和管理虚拟机的轻量级开源工具:lume
前端·后端
MoRanzhi12031 小时前
亲和传播聚类算法应用(Affinity Propagation)
人工智能·python·机器学习·数学建模·scikit-learn·聚类
金融OG1 小时前
99.23 金融难点通俗解释:小卖部经营比喻PPI(生产者物价指数)vsCPI(消费者物价指数)
人工智能·python·机器学习·数学建模·金融·数据可视化
是Dream呀2 小时前
Python从0到100(八十六):神经网络-ShuffleNet通道混合轻量级网络的深入介绍
网络·python·神经网络