如何正确的使用Django的权限控制功能

  介绍

今天就跟大家聊聊有关如何正确的使用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

如何正确的使用Django的权限控制功能