圆月山庄资源网 Design By www.vgjia.com
自己搭建后台网站,需求:实现类似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,权限控制
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
更新日志
2024年11月01日
2024年11月01日
- 群星《戏梦》[FLAC/分轨][308.4MB]
- 魔兽世界永久60级什么时间开 永久60级开启时间介绍
- 魔兽世界奥卡兹岛血藻刷新点一览 wlk奥卡兹岛血藻刷新位置介绍
- 英雄联盟s14中国队种子怎么排名 s14中国队种子队伍排名一览
- 柏菲·梁玉嵘《知音梁品》限量开盘母带ORMCD[低速原抓WAV+CUE]
- [东升唱片]孙露《寂寞诱惑AQCD》高码率[FLAC]
- 群星-第8届2012十大发烧唱片精选HQ2CD[WAV+CUE]
- 九号公司两轮电动安全季行动圆满收官:为行业树立安全管理新标杆
- 创新驱动未来 中国移动5G云游戏深化智能运维应用推动行业发展
- 大型手游“帧数拉满” 骁龙8至尊版游戏表现强悍
- 谢金燕.2002-YOYO姊妹【华特】【WAV+CUE】
- 群星.1994-摇滚列车【音乐家】【WAV+CUE】
- 陈艾湄.1996-牵绊【巨翼】【WAV+CUE】
- 群星《无法抗拒的谎言 电视剧原声带》[320K/MP3][69.98MB]
- 群星《无法抗拒的谎言 电视剧原声带》[FLAC/分轨][372.04MB]