首页 > 其他分享 >权限Permissions

权限Permissions

时间:2022-12-09 22:44:31浏览次数:40  
标签:permission self get request 访问 权限 Permissions

权限Permissions

权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。

  • 在执行视图的dispatch方法前,会先进行视图访问权限的判断
  • 在通过get_object()获取具体对象时,会进行模型对象访问权限的判断

区分不同的用户访问不同 的接口

1、源码分析

#APIView----》dispatch-----》initial-----》self.check_permissions(reqeust)  (APIView的对象方法)
	    def check_permissions(self, request):
        #遍历权限对象列表得到一个权限对象 (权限器),进行权限认证
        for permission in self.get_permissions():#权限类的对象,放到列表中
            #权限类一定有一个has_permission权限方法,用来做权限认证的
            #参数:权限对象self、请求对象request、视图类对象
            #返回值:有权限返回True,无权限返回False,
            if not permission.has_permission(request, self):
                self.permission_denied(
                    request,
                    message=getattr(permission, 'message', None),
                    code=getattr(permission, 'code', None)
                )

image-20221209215104778

2、自定义权限

#写一个类,继承BasePermission,重写has_permission,如果权限通过,就返回True,不通过返回False
from rest_framework.permissions import BasePermission


class UserPermission(BasePermission):
    def has_permission(self, request, view):
        # 不是超级用户不能访问,
        # 由于已经认证过了,所有request里有user对象,(当前登录的用户)
        user = request.user  # 当前登录用户
        print(user.get_user_type_display())
        # 该字段用来choices参数,通过get_字段名_display()就能取出choices后面的中文
        if user.user_type == 1:
            return True
        else:
            return False
局部使用
# 只有超级用户可以访问
from app01.app_auth import UserPermission
class TestView(APIView):
    authentication_classes = [MyAuthentication]
    permission_classes = [UserPermission]

    def get(self, request, *args, **kwargs):
        return Response('我是测试数据1111')
        # return Response(True)


# 只要登录用户就可以访问
class Test2View(APIView):
    authentication_classes = [MyAuthentication]

    def get(self, request, *args, **kwargs):
        return Response('我是测试数据2222')


只有登录后,才能认证,才能有权限

image-20221209215635389

sb用户不是管理员用户,所有不能访问test路由

image-20221209215331678

但是sb用户 可以访问test2路由,只要登录了就能访问

image-20221209215906414

全局使用
#settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        "app01.app_auth.MyAuthentication"
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'app01.app_auth.UserPermission',
    ],
}

加了全局配置后,test2就不能访问了,也需要超级管理员才能访问,这首就需要局部禁用,加个空列表就可可以了

局部禁用
class Test2View(APIView):
    authentication_classes = [MyAuthentication]
    permission_classes = []
    def get(self, request, *args, **kwargs):
        return Response('我是测试数据2222')

3、内置权限

IsAdminUser使用
先创建超级用户 python manage.py createsuperuser
并登录。

image-20221209222802457

#views.py
from rest_framework.permissions import IsAdminUser
from rest_framework.authentication import BasicAuthentication,SessionAuthentication
# 超级管理员可以查看
class Test3View(APIView):
    authentication_classes = [SessionAuthentication]
    permission_classes = [IsAdminUser]

    def get(self, request, *args, **kwargs):
        return Response('我是测试数据3333')
    
    
#urls.py
 path('test3/', views.Test3View.as_view()),
    

先登录到admin,再访问test3路由,就有权限

image-20221209222849719

(12)频率

标签:permission,self,get,request,访问,权限,Permissions
From: https://www.cnblogs.com/zaosong/p/16970387.html

相关文章

  • 微信小程序授权权限封装
    权限封装=>permisson.js/***检测是否有对应的权限,通过回调函数返回结果*@param{String}perName权限名称*@param{function}perResultCbFun结果回调函数,参......
  • KubeSphere v3.3.1 权限控制详解
    作者:周文浩,青云科技研发工程师,KubeSphereMaintainer。热爱云原生,热爱开源,目前负责KubeSphere权限控制的开发与维护。KubeSphere3.3.1已经发布一个多月了。3.3.1......
  • 面对庞大复杂的身份和权限管理,企业该怎么办?
    摘要:随着各领域加快向数字化、移动化、互联网化的发展,企业信息环境变得庞大复杂,身份和权限管理面临巨大的挑战。本文分享自华为云社区《面对庞大复杂的身份和权限管理,企业......
  • 二进制权限管理
    publicclassNewPermission{//是否允许查询,二进制第1位,0表示否,1表示是publicstaticfinalintALLOW_SELECT=1<<0;//0001//是否......
  • Django 利用 django-guardian 实现对象级别权限控制以及展示
    安装#pipinstalldjango-guardian配置settings.py中注册django-guardianINSTALLED_APPS=(#...'guardian',)settings.py中添加配置用于django-gu......
  • 权限管理
    常用命令命令名用法用例注意chgrp改变组chgrp组名文件名只有组名存在时才可以chown改变用户chown用户名:组名(一起修改)只能root执行chmod改变......
  • C#不提升自己程序的权限实现操作注册表
    1.绪论当我们编写了自己的C#程序,有程序自定义的文件类型时,通常希望它满足以下需求:双击自定义文件打开自定义程序自定义文件有着自己的图标此时,在网上检索可以发现,大......
  • 你的ES还在裸奔吗?还不赶紧开启X-Pack权限认证
    前言在es的早期版本中,没有免费提供安全认证的相关功能。为了防止数据安全问题,一般的措施都是采用IP黑白名单,网络防火墙,Nginx代理权限控制。而从es6.8和7.1版本开始,es给我......
  • Linux文件夹执行权限不够怎么办?如何处理?
    在Linux中,文件夹的执行权限不够是非常普遍的情况,那么遇到这种情况该如何处理呢?我们可以通过修改权限来解决该问题,其中比较常用的命令是chmod,接下来我们来看看详细的内......
  • 【Ubuntu服务器】用户分配及sudo权限赋予
    SSH服务部署服务器刚刚部署Ubuntu环境,并不支持SSH访问服务器,所以需要先安装openssh-serversudoaptupdatesudoaptinstallopenssh-server安装完成后,SSH服务将被自......