REST-framework快速构建API--权限

作者:@skyflask
转载本文请注明出处:https://www.cnblogs.com/skyflask/p/10404424.html


目录

一、权限级别定义
二、权限控制
三、权限应用

我们在访问资源时,有些资源保密程度较高,需要特殊的人员才能访问。比如,获取公司的每日收入流水的API接口,只能CEO才能查看。 

这时,我们就需要将资源设定权限了。

REST-framework实现如下:

一、权限级别定义

我们规定用户类型为三种:

  • 普通用户
  • 管理员
  • 超级管理员
1
2
3
4
5
class User(models.Model):
    name = models.CharField(max_length=32)
    pwd = models.CharField(max_length=32)
    type_choices = ((1, "普通用户"), (2, "管理员"), (3, "超级管理员"))
    user_type = models.IntegerField(choices=type_choices, default=1)

  其中,超级管理员可以查看公司每日收入流水。

二、权限控制

1
2
3
4
5
6
7
8
from rest_framework.permissions import BasePermission
class SVIPPermission(BasePermission):
    message="超级管理员才能访问!"
    def has_permission(self, request, view):
        user = User.objects.filter(name=request.user).first()
        if user.user_type==3:
            return True
        return False

  

三、权限应用

局部应用

1
2
3
4
5
class BookModelView(viewsets.ModelViewSet):
    authentication_classes = [TokenAuth,]
    permission_classes = [SVIPPermission,]
    queryset = Book.objects.all()
    serializer_class = BookModelSerializers

  

人员权限:

 人员对应的token:

访问测试如下:

普通用户访问Books资源:

 

超级管理员访问资源:

 

全局应用

1
2
3
4
5
REST_FRAMEWORK={
    "DEFAULT_AUTHENTICATION_CLASSES":["app01.utils.TokenAuth",],
    "DEFAULT_PERMISSION_CLASSES": ["app01.utils.SVIPPermission", ]
 
}

  

posted @   skyflask  阅读(393)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示