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中使用dict和set方法的教程
Apr 27 Python
python获取指定路径下所有指定后缀文件的方法
May 26 Python
Python+OpenCV人脸检测原理及示例详解
Oct 19 Python
书单|人生苦短,你还不用python!
Dec 29 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
Jan 17 Python
Windows环境下python环境安装使用图文教程
Mar 13 Python
python3+PyQt5泛型委托详解
Apr 24 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 Python
如何利用Python matplotlib绘制雷达图
Dec 21 Python
Python 绘制多因子柱状图
May 11 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
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
原生js实现shift/ctrl/alt按键的获取
2013/04/08 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
python使用urlparse分析网址中域名的方法
2015/04/15 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
Django如何自定义分页
2018/09/25 Python
python 实现UTC时间加减的方法
2018/12/31 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
python 实现逻辑回归
2020/12/30 Python
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
什么是跨站脚本攻击
2014/12/11 面试题
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
学生实习自我鉴定
2013/10/11 职场文书
装饰资料员岗位职责
2013/12/30 职场文书
物业管理计划书
2014/01/10 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
单位委托书怎么写
2014/08/02 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书