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返回真假值(True or False)小技巧
Apr 10 Python
Python中type的构造函数参数含义说明
Jun 21 Python
深入理解python多进程编程
Jun 12 Python
Python单例模式实例详解
Mar 01 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
Python格式化字符串f-string概览(小结)
Jun 18 Python
python脚本后台执行方式
Dec 21 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
在python3.64中安装pyinstaller库的方法步骤
Jun 02 Python
python 下载文件的多种方法汇总
Nov 17 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 Python
python实现图片九宫格分割的示例
Apr 25 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
基于mysql的论坛(5)
2006/10/09 PHP
收集的DedeCMS一些使用经验
2007/03/17 PHP
几个php应用技巧
2008/03/27 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
深入php处理整数函数的详解
2013/06/09 PHP
CI框架入门示例之数据库取数据完整实现方法
2014/11/05 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
boostrapTable的refresh和refreshOptions区别浅析
2017/01/22 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
在Python中编写数据库模块的教程
2015/04/29 Python
python for循环remove同一个list过程解析
2019/08/14 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
购买原创艺术品:Zatista
2019/11/09 全球购物
运行时异常与一般异常有何异同?
2014/01/05 面试题
业务部经理岗位职责
2014/01/04 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
教师师德师风整改措施
2014/10/24 职场文书
python使用glob检索文件的操作
2021/05/20 Python
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
Redis Cluster 集群搭建你会吗
2021/08/04 Redis
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python