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每次处理固定个数的字符的方法总结
Jan 29 Python
Python标准异常和异常处理详解
Feb 02 Python
Anaconda入门使用总结
Apr 05 Python
python中的tcp示例详解
Dec 09 Python
selenium 安装与chromedriver安装的方法步骤
Jun 12 Python
Python多线程模块Threading用法示例小结
Nov 09 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
使用Python发现隐藏的wifi
Mar 04 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
Apr 26 Python
Python魔术方法专题
Jun 19 Python
Python pandas对excel的操作实现示例
Jul 21 Python
Python开发入门——迭代的基本使用
Sep 03 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连接操作access数据库实例
2015/03/30 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
深入浅析python with语句简介
2018/04/11 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
Django处理多用户类型的方法介绍
2019/05/18 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
什么是Python变量作用域
2020/06/03 Python
Matplotlib.pyplot 三维绘图的实现示例
2020/07/28 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
医学毕业生自荐信
2013/10/11 职场文书
大学生村官工作感言
2014/01/10 职场文书
音乐学专业求职信
2014/07/22 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
优秀教师单行材料
2014/12/16 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python