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


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

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

    1. 权限控制

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

    全局权限控制

    修改setting,添加在installed_apps之后

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

    自定义权限控制

    在views中添加permissions信息

    1. #simpletool/views.py
    2. from simpletool.permissions import IsAuthenticatedOrAdmin
    3. # Create your views here.
    4. class simpletoolList(generics.ListCreateAPIView):
    5. queryset = simpleTool.objects.all()
    6. serializer_class = ToolListSerializer
    7. permission_classes = [IsAuthenticatedOrAdmin]
    8. class simpletoolDetail(generics.RetrieveUpdateDestroyAPIView):
    9. queryset = simpleTool.objects.all()
    10. serializer_class = ToolDetailSerializer
    11. permission_classes = [IsAuthenticatedOrAdmin]

    补充permissions.py文件

    1. from rest_framework import permissions
    2. class IsAuthenticatedOrAdmin(permissions.IsAuthenticated):
    3. def has_permission(self, request, view):
    4. # 对注册用户开放操作
    5. # if request.method in permissions.SAFE_METHODS:
    6. if (request.user.is_authenticated) and (request.method in permissions.SAFE_METHODS):
    7. return True
    8. # 仅管理员可进行其他操作
    9. 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"

  • 相关阅读:
    TCR历史论文多久能发表?
    EXCEL如何把一个单元格内的文本和数字分开?例如:龚龚15565 = 龚龚 15565
    Hadoop 2.0:主流开源云架构(四)
    有人物联的串口服务器USR-TCP232-410S基本测试通信和使用方案(485串口和232串口)
    redhat下使用CentOS yum源,并安装docker
    DOM知识点总结
    我是如何将一个老系统的kafka消费者服务的性能提升近百倍的
    【数据结构】优先级队列(堆)重点知识汇总(附有代码)
    JavaScript之运算符相关知识
    PAT甲级:1043 Is It a Binary Search Tree
  • 原文地址:https://blog.csdn.net/weixin_44056331/article/details/134542747