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中使用Neo4j数据库的教程
Apr 16 Python
Python实现动态加载模块、类、函数的方法分析
Jul 18 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
pandas修改DataFrame列名的方法
Apr 08 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
python pandas时序处理相关功能详解
Jul 03 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
python字符串反转的四种方法详解
Dec 02 Python
Python函数的定义方式与函数参数问题实例分析
Dec 26 Python
python 实现客户端与服务端的通信
Dec 23 Python
Python wordcloud库安装方法总结
Dec 31 Python
python中re模块知识点总结
Jan 17 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
支付宝接口开发集成支付环境小结
2015/03/17 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
js中更短的 Array 类型转换
2011/10/30 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
JavaScript数组_动力节点Java学院整理
2017/06/26 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
全面解析Vue中的$nextTick
2020/12/24 Vue.js
python编写简单爬虫资料汇总
2016/03/22 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
Python爬取附近餐馆信息代码示例
2017/12/09 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
对pandas中apply函数的用法详解
2018/04/10 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
详解Python字典的操作
2019/03/04 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
彪马西班牙官网:PUMA西班牙
2019/06/18 全球购物
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
学生周末长期请假条
2014/02/15 职场文书
物业保安员岗位职责
2014/03/14 职场文书
《谁的本领大》教后反思
2014/04/25 职场文书
2014财务年度工作总结
2014/11/11 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL