DRF内置权限组件之自定义权限管理类
2020-08-12 11:24
435 查看
DRF内置权限组件permissions
权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。
- 在执行视图的dispatch()方法前,会先进行视图访问权限的判断
- 在通过get_object()获取具体对象时,会进行模型对象访问权限的判断
在settings.py中设置DRF内置的权限组件的配置信息:
DRF提供了四种权限划分
REST_FRAMEWORK = { ... 'DEFAULT_PERMISSION_CLASSES': ( # 一、默认用户对所有的业务都有操作权限,即没有权限限制(未指明时默认的权限) 'rest_framework.permissions.AllowAny', # 二、仅通过认证的用户才可以访问项目中的接口 'rest_framework.permissions.IsAuthenticated', # 三、仅管理员用户(可以通过admin创建一个用户进行测试) 'rest_framework.permissions.IsAdminUser', # 四、未认证的用户只有查权限,经过认证的用户才有增删改的权限 'rest_framework.permissions.IsAuthenticatedOrReadOnly', ), }
以上这种全局配置方式,表示用户在访问项目中的所有接口时都有权限限制。
当然,我们可以进行局部配置,在指定的类视图中通过
permission_classes属性配置权限管理类
permission_classes = [IsAuthenticated, ]
from rest_framework.views import APIView from rest_framework.permissions import IsAuthenticated class ExampleView(APIView): permission_classes = [IsAuthenticated,]
自定义权限管理类
如需自定义权限,需继承
rest_framework.permissions.BasePermission父类,并实现以下两个任何一个方法或全部
.has_permission(self, request, view)
是否可以访问视图, view表示当前视图对象
.has_object_permission(self, request, view, obj)
是否可以访问数据对象, view表示当前视图, obj为数据对象
例如:
在当前子应用下的utils文件夹中,创建一个权限文件permissions.py中声明自定义权限类:
from rest_framework.permissions import BasePermission class IsXiaoMingPermission(BasePermission): def has_permission(self, request, view): print(request) # 局部配置下的打印结果:<rest_framework.request.Request object at 0x112041c50> print(view) # 局部配置下的打印结果:<four.views.StudentViewSet object at 0x111f8a110> if( request.user.username == "xiaoming" ): return True
全局配置
用户在访问项目中的所有接口时都有
IsXiaoMingPermission此权限管理限制。
REST_FRAMEWORK = { ... 'DEFAULT_PERMISSION_CLASSES': ( 'four.utils.permissions.IsXiaoMingPermission', ) ... }
局部配置
from four.utils.permissions import IsXiaoMingPermission class StudentViewSet(ModelViewSet): queryset = Student.objects.all() serializer_class = StudentSerializer permission_classes = [IsXiaoMingPermission,]
相关文章推荐
- android 权限(二)给基本组件自定义权限(以activity为例)
- DRF内置认证组件之自定义认证系统
- DRF内置限流组件之自定义限流机制
- DRF内置过滤组件与排序组件结合使用
- DRF权限组件
- 假设已经存在函数 get_permissions可以获取当前用户的权限列表, 设计一个权限管理类,既可以作为装饰器,对一个函数授权,也可以作为上下文管理,对一段代码授权
- JSP的9种基本内置组件
- Oracle内置角色connect与resource的权限
- C#.NET 权限管理系统组件 - 大数据读写分离实现的例子
- 如何在自己的信息管理系统里集成第三方权限控制组件 - 开发一个好用稳定的开放组件
- 认证组件权限组件与频率组件
- keep-alive 内置组件元素:保留组件状态或避免重新渲染
- 通用权限管理系统组件 (GPM - General Permissions Manager)
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中最简单的例子程序
- 写在C#.NET通用权限管理系统组件源码销售额突破(23000元/月)大关,客户数量超过156人
- C# ASP.NET 走火入魔通用权限管理系统组件V3.2试用版下载地址【含数据库设计文档、使用手册】
- 内置组件 -slot讲解
- [C#.NET通用权限管里系统组件]对资源权限、列表型、记录级权限、数据集权限的实现参考
- Android自定义权限和使用权限
- Django中内置的权限控制5-Authentication backends