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"
相关推荐
geovindu3 小时前
python: Memento Pattern
开发语言·python·设计模式·备忘录模式
苍何3 小时前
字节发力,豆包大模型2.0 震撼来袭(附 Trae 实测)
后端
苍何3 小时前
不会剪辑的人,开始用 AI 批量出爆款了
后端
苍何3 小时前
百度 APP 正式接入 OpenClaw,所有人限时免费!
后端
寻星探路3 小时前
【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机
java·开发语言·jvm·人工智能·python·算法·ai
lbb 小魔仙3 小时前
【Java】Java 实战项目:手把手教你写一个电商订单系统
android·java·python
岱宗夫up3 小时前
FastAPI入门(上篇):快速构建高性能Python Web API
开发语言·前端·python·fastapi
Dxy12393102163 小时前
中文乱码恢复方案
开发语言·python
rongyili884 小时前
Dify 外部知识库集成 Milvus 实战指南
开发语言·python·milvus
Hello eveybody4 小时前
什么是动态规划(DP)?(Python版)
python·动态规划