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的Flask框架中@app.route的用法教程
Mar 31 Python
Python 的内置字符串方法小结
Mar 15 Python
非递归的输出1-N的全排列实例(推荐)
Apr 11 Python
python去掉空白行的多种实现代码
Mar 19 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
详解从Django Allauth中进行登录改造小结
Dec 18 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
Python如何把Spark数据写入ElasticSearch
Apr 18 Python
MATLAB数学建模之画图汇总
Jul 16 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 Python
Python中的流程控制详解
Feb 18 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数组操作汇总 php数组的使用技巧
2011/07/17 PHP
Jquery 学习笔记(一)
2009/10/13 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
详解如何在Javascript和Sass之间共享变量
2019/11/13 Javascript
python中list常用操作实例详解
2015/06/03 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
Python程序运行原理图文解析
2018/02/10 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
Python如何将装饰器定义为类
2020/07/30 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
西门豹教学反思
2014/02/04 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
项目采购员岗位职责
2014/04/15 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
秋季校运会广播稿100字
2014/09/18 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
委托公证书样本
2015/01/23 职场文书
老公婚前保证书
2015/02/28 职场文书
病假条格式范文
2015/08/17 职场文书
Java基础——Map集合
2022/04/01 Java/Android
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技