Django权限控制的使用
程序员文章站
2022-03-10 21:36:56
自己搭建后台网站,需求:实现类似django admin站点对每一张表的增删改查权限控制。实现步骤:1.权限控制django框架已自带,共6张表,user表,group表,usergroup表,per...
自己搭建后台网站,需求:实现类似django admin站点对每一张表的增删改查权限控制。
实现步骤:
1.权限控制django框架已自带,共6张表,user表,group表,usergroup表,permission表,grouppermission表,userpermission表,一般情况下,使用默认即可。
2.若user表自定义,需继承django自带abstractuser类,group表同理。
3.创建类permissioncontrol继承basepermission,重写has_permission和has_object_permission方法。
import re from django.contrib.auth.models import anonymoususer from rest_framework.permissions import basepermission class permissioncontrol(basepermission): """自定义权限控制类""" def has_permission(self, request, view): # 0.若用户未登陆直接访问,返回未授权 if isinstance(request.user, anonymoususer): return false permission_list = request.user.role.get_all_permissions() # 1.角色管理-角色 if request.method == 'get' and re.match(r'^/role_manage/roles/$', request.path): if 'view_role' in permission_list: return true else: return false elif request.method == 'post' and re.match(r'^/role_manage/roles/$', request.path): if 'add_role' in permission_list: return true else: return false elif request.method == 'put' and re.match(r'^/role_manage/roles/\d+/$', request.path): if 'change_role' in permission_list: return true else: return false elif request.method == 'patch' and re.match(r'^/role_manage/roles/\d+/$', request.path): if 'change_role' in permission_list: return true else: return false elif request.method == 'delete' and re.match(r'^/role_manage/roles/\d+/$', request.path): if 'delete_role' in permission_list: return true else: return false # 同理,判断所有路由及权限 def has_object_permission(self, request, view, obj): """get请求单个对象时执行""" # 0.若用户未登陆直接访问,返回未授权 if isinstance(request.user, anonymoususer): return false permission_list = request.user.get_all_permissions() # 1.角色管理-角色 if request.method == 'get' and re.match(r'^/role_manage/roles/\d+/$', request.path): if 'view_role' in permission_list: return true else: return false # 同理,判断所有路由及权限
4.视图中使用,本网站使用drf框架,仅需在要控制权限的类视图中加上permission_classes权限控制即可。
class roleviewset(modelviewset): """ list: 查询所有角色 read: 根据角色id,查询角色 create: 创建角色 delete: 根据角色id,删除角色 update: 根据角色id,更新角色信息 partial_update: 根据角色id,部分更新角色信息 """ queryset = role.objects.filter(is_delete=0).all() serializer_class = roleserializer permission_classes = [permissioncontrol] filterset_class = rolefilter pagination_class = standarpagenumberpagination
5.数据库中组(角色)权限表需添加角色权限,如:
到此这篇关于django权限控制的使用的文章就介绍到这了,更多相关django权限控制内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: MYSQL慢查询与日志的设置与测试
推荐阅读
-
javascript实现的使用方向键控制光标在table单元格中切换_javascript技巧
-
使用Python的web.py框架实现类似Django的ORM查询的教程
-
【原创】版本控制软件Subversion的使用笔记
-
Java位掩码控制权限与(&)或(|)非(~)、>的介绍
-
SpringBoot+Spring Security+JWT实现RESTful Api权限控制的方法
-
使用windows控制台调试服务的方法
-
django1.8使用表单上传文件的实现方法
-
Android使用libgdx实现模拟方向键控制角色移动的方法
-
ASP.NET MVC使用ActionFilterAttribute实现权限限制的方法(附demo源码下载)
-
mysql SKIP-NAME-RESOLVE 错误的使用时机造成用户权限