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"
相关推荐
IpdataCloud11 分钟前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
明月_清风20 分钟前
为什么最近开始关注 JEV?几个实战案例告诉你答案
人工智能·后端
2601_9669496535 分钟前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
蒸鱼Yuzheng39 分钟前
Python 游戏测试开发怎么准备:日志解析、接口校验、并发与可维护性
自动化测试·python·测试开发·面试题·游戏测试
Ivanqhz1 小时前
BM1688 双核架构
python·深度学习·神经网络·cnn·mlir
GetcharZp1 小时前
5 分钟拥有自己的 S3:RustFS 上手(MinIO 的 Rust 替代,Apache 2.0 可商用)
后端
Java后端的Ai之路1 小时前
Python进阶探索17 - Python中的深拷贝与浅拷贝
人工智能·python·ai·浅拷贝·深拷贝
行百里er2 小时前
Redis 版本演进、新特性与协议那些事儿
redis·后端
Joy T2 小时前
Spring AI 2.0 Agent 进阶:Memory、State 与 Context Engineering 常见技术全景
java·人工智能·后端·spring·agent入门·agent state
西柚研究生1234562 小时前
论文分析17:YOLOv11_UAVNet:无人机航拍图像专用目标检测算法
人工智能·python·深度学习·算法·目标检测