Django权限控制的使用

 更新时间:2021年01月07日 11:47:47   作者:zhu6201976-朱华龙  
这篇文章主要介绍了Django权限控制的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

自己搭建后台网站,需求:实现类似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权限控制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python-pymongo常用查询方法含聚合问题

    python-pymongo常用查询方法含聚合问题

    这篇文章主要介绍了python-pymongo常用查询方法含聚合问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 详解flask中如何获取不请求方式的参数

    详解flask中如何获取不请求方式的参数

    这篇文章主要详细介绍了在flask中如何获取不请求方式的参数,文中给出了详细的代码示例和图文介绍,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-04-04
  • 如何利用Python开发一个简单的猜数字游戏

    如何利用Python开发一个简单的猜数字游戏

    这篇文章主要给大家介绍了关于如何利用Python开发一个简单的猜数字游戏的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Python使用yaml模块操作YAML文档的方法

    Python使用yaml模块操作YAML文档的方法

    YAML是可读性高,用来表达数据序列化格式的,专用于写配置文件的语言,这篇文章主要介绍了Python使用yaml模块操作YAML文档,需要的朋友可以参考下
    2023-01-01
  • 对python 命令的-u参数详解

    对python 命令的-u参数详解

    今天小编就为大家分享一篇对python 命令的-u参数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python中的集合及集合常用的使用方法

    python中的集合及集合常用的使用方法

    这篇文章主要介绍了python中的集合及集合常用的使用方法,集合是一个无序的不重复元素序列,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • python用10行代码实现对黄色图片的检测功能

    python用10行代码实现对黄色图片的检测功能

    这篇文章主要介绍了python用10行代码实现对黄色图片的检测功能,涉及Python基于图片库PIL对图片的检测技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • python实现的DES加密算法和3DES加密算法实例

    python实现的DES加密算法和3DES加密算法实例

    这篇文章主要介绍了python实现的DES加密算法和3DES加密算法,以实例形式较为详细的分析了DES加密算法和3DES加密算法的原理与实现技巧,需要的朋友可以参考下
    2015-06-06
  • pygame中blit()参数的使用及脏矩形动画形成的说明

    pygame中blit()参数的使用及脏矩形动画形成的说明

    这篇文章主要介绍了pygame中blit()参数的使用及脏矩形动画形成的说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • python求一个字符串的所有排列的实现方法

    python求一个字符串的所有排列的实现方法

    这篇文章主要介绍了python求一个字符串的所有排列的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02

最新评论