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 多线程应用介绍
Dec 19 Python
Python扩展内置类型详解
Mar 26 Python
python 平衡二叉树实现代码示例
Jul 07 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
python的faker库用法
Nov 28 Python
python连接mongodb集群方法详解
Feb 13 Python
pycharm 关闭search everywhere的解决操作
Jan 15 Python
python实战之用emoji表情生成文字
May 08 Python
python如何为list实现find方法
May 30 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
php结合md5实现的加密解密方法
2016/01/25 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
原生javascript实现无间缝滚动示例
2014/01/28 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
从vue源码看props的用法
2019/01/09 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
Python使用MD5加密字符串示例
2014/08/22 Python
Python Requests 基础入门
2016/04/07 Python
Django框架教程之正则表达式URL误区详解
2018/01/28 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
Python requests接口测试实现代码
2020/09/08 Python
医院护士的求职信
2014/01/03 职场文书
白岩松演讲
2014/05/21 职场文书
义和团口号
2014/06/17 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
合伙经营协议书范本
2014/09/13 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
JAVA API 实用类 String详解
2021/10/05 Java/Android