Django权限控制的使用


Posted in Python onJanuary 07, 2021

自己搭建后台网站,需求:实现类似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权限控制的使用的文章就介绍到这了,更多相关Django权限控制内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
Oct 23 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
python实现飞机大战
Sep 11 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
浅谈python标准库--functools.partial
Mar 13 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
python基于opencv 实现图像时钟
Jan 04 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 Python
Python爬虫基础初探selenium
May 31 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 #Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 #Python
jupyter notebook更换皮肤主题的实现
Jan 07 #Python
基于 Python 实践感知器分类算法
Jan 07 #Python
如何编写python的daemon程序
Jan 07 #Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
Jan 07 #Python
详解Python遍历列表时删除元素的正确做法
Jan 07 #Python
You might like
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
symfony表单与页面实现技巧
2015/01/26 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
推荐一个自己用的封装好的javascript插件
2015/01/29 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
家长给老师的道歉信
2014/01/13 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
迁户口计划生育证明
2014/10/19 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
演讲开场白台词大全
2015/05/29 职场文书
2015小学师德工作总结
2015/07/21 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python