介绍
今天就跟大家聊聊有关如何正确的使用Django的权限控制功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
实现步骤:
1。权限控制Django框架已自带,共6张表,用户表,表,UserGroup表,权限表,GroupPermission表,UserPermission表,一般情况下,使用默认即可。
2。若用户表自定义,需继承Django自带AbstractUser类,组表同理。
3。创建类PermissionControl继承BasePermission,重写has_permission和has_object_permission方法。
import 再保险 , 得到django.contrib.auth.models import  AnonymousUser 得到rest_framework.permissions import  BasePermission , , class PermissionControl (BasePermission): “““才能自定义权限控制类“““ , def 才能;has_permission(自我,,请求,,视图): ,,,#,0。若用户未登陆直接访问,返回未授权 ,,,if isinstance (request.user, AnonymousUser): ,,,,,return 错误的 ,,,permission_list =, request.user.role.get_all_permissions () ,,,# 1。角色管理——角色 ,,,if request.method ==, & # 39;得到# 39;,以及re.match (" # 39; ^/role_manage/角色/$ & # 39;,,request.path): ,,,,,if & # 39; view_role& # 39;,拷贝permission_list: ,,,,,,,return 真实的 ,,,,,其他的: ,,,,,,,return 错误的 ,,,elif request.method ==, & # 39;文章# 39;,以及re.match (" # 39; ^/role_manage/角色/$ & # 39;,,request.path): ,,,,,if & # 39; add_role& # 39;,拷贝permission_list: ,,,,,,,return 真实的 ,,,,,其他的: ,,,,,,,return 错误的 ,,,elif request.method ==, & # 39;把# 39;,以及re.match (" # 39; ^/role_manage/角色/\ d +/$ & # 39;,, request.path): ,,,,,if & # 39; change_role& # 39;,拷贝permission_list: ,,,,,,,return 真实的 ,,,,,其他的: ,,,,,,,return 错误的 ,,,elif request.method ==, & # 39;补丁# 39;,以及re.match (" # 39; ^/role_manage/角色/\ d +/$ & # 39;,, request.path): ,,,,,if & # 39; change_role& # 39;,拷贝permission_list: ,,,,,,,return 真实的 ,,,,,其他的: ,,,,,,,return 错误的 ,,,elif request.method ==, & # 39;删除# 39;,以及re.match (" # 39; ^/role_manage/角色/\ d +/$ & # 39;,, request.path): ,,,,,if & # 39; delete_role& # 39;,拷贝permission_list: ,,,,,,,return 真实的 ,,,,,其他的: ,,,,,,,return 错误的 , ,,,#,同理,判断所有路由及权限 , def 才能;has_object_permission(,看来,自我,,请求,obj): ,,,,,,得到请求单个对象时执行“““ ,,,#,0。若用户未登陆直接访问,返回未授权 ,,,if isinstance (request.user, AnonymousUser): ,,,,,return 错误的 ,,,permission_list =, request.user.get_all_permissions () ,,,# 1。角色管理——角色 ,,,if request.method ==, & # 39;得到# 39;,以及re.match (" # 39; ^/role_manage/角色/\ d +/$ & # 39;,, request.path): ,,,,,if & # 39; view_role& # 39;,拷贝permission_list: ,,,,,,,return 真实的 ,,,,,其他的: ,,,,,,,return 错误的 ,,,#,同理,判断所有路由及权限
4。视图中使用,本网站使用drf框架,仅需在要控制权限的类视图中加上permission_classes权限控制即可。
class RoleViewSet (ModelViewSet): “才能”;“ 列表:才能 查才能询所有角色 读才能: ,,根据角色id、查询角色 创造才能: 创才能建角色 删除才能: ,,根据角色id、删除角色 更新:才能 ,,根据角色id,更新角色信息 partial_update才能: ,,根据角色id,部分更新角色信息 “才能”;“ 时间=queryset 才能;Role.objects.filter (is_delete=0) () serializer_class 才能=RoleSerializer 时间=permission_classes 才能;[PermissionControl] filterset_class 才能=RoleFilter pagination_class 才能=,StandarPageNumberPagination
5。null