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实现按学生年龄排序的实际问题详解
Aug 29 Python
Python基于dom操作xml数据的方法示例
May 12 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
Jan 24 Python
学习python分支结构
May 17 Python
Python assert语句的简单使用示例
Jul 28 Python
python进程间通信Queue工作过程详解
Nov 01 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
Python3 中sorted() 函数的用法
Mar 24 Python
Pycharm激活方法及详细教程(详细且实用)
May 12 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
Jun 15 Python
Python同时迭代多个序列的方法
Jul 28 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在线生成ico文件的代码
2007/10/09 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
Python实现Kmeans聚类算法
2020/06/10 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
大学生活动总结模板
2014/07/02 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
模范班主任事迹材料
2014/12/17 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
mysql中between的边界,范围说明
2021/06/08 MySQL