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实现telnet服务器的方法
Jul 10 Python
python脚本设置超时机制系统时间的方法
Feb 21 Python
详解Python 数据库 (sqlite3)应用
Dec 07 Python
Python信息抽取之乱码解决办法
Jun 29 Python
python3读取excel文件只提取某些行某些列的值方法
Jul 10 Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 Python
Python爬取爱奇艺电影信息代码实例
Nov 26 Python
python实现高斯投影正反算方式
Jan 17 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
一篇文章搞懂python的转义字符及用法
Sep 03 Python
python 生成正态分布数据,并绘图和解析
Dec 21 Python
selenium+python实现基本自动化测试的示例代码
Jan 27 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 分页类实现代码
2009/12/03 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
[原创]图片分页查看
2006/08/28 Javascript
Prototype使用指南之array.js
2007/01/10 Javascript
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
json简单介绍
2008/06/10 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
JavaScript中清空数组的三种方式
2017/03/22 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
在vue项目中使用sass的配置方法
2018/03/20 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
python中的字典使用分享
2016/07/31 Python
Python常见工厂函数用法示例
2018/03/21 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
国外软件测试工程师面试题
2016/12/09 面试题
光电信息专业应届生求职信
2013/10/07 职场文书
三个儿子教学反思
2014/02/03 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
租赁协议书
2015/01/27 职场文书
vue 自定义组件添加原生事件
2022/04/21 Vue.js