• 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"

  • 相关阅读:
    【10套模拟】【2】
    vulhub venom
    13. MIC配置
    23 种设计模式的通俗解释,虽然有点污,但是很正点
    2696. Minimum String Length Afte
    小学生学python --python环境搭建(包括正常,专业,学生版)
    每日五道java面试题之springMVC篇(一)
    关于老项目从JDK8升级到JDK17所需要注意的细节
    怎么跨网络远程控制电脑?
    智慧综合体建设方案 51页
  • 原文地址:https://blog.csdn.net/weixin_44056331/article/details/134542747