Django权限控制的使用

作者:zhu6201976-朱华龙 时间:2023-12-27 01:50:57 

自己搭建后台网站,需求:实现类似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权限控制的使用

来源:https://blog.csdn.net/zhu6201976/article/details/85261410

标签:Django,权限控制
0
投稿

猜你喜欢

  • Python实现分数序列求和

    2023-10-07 12:44:54
  • Python实现连接postgresql数据库的方法分析

    2024-01-23 05:45:31
  • ASP连接MSSQL2005 数据库

    2009-03-08 19:20:00
  • 浅析python3字符串格式化format()函数的简单用法

    2021-03-26 15:05:49
  • 在EF中使用MySQL的方法及常见问题

    2024-01-28 11:22:03
  • 如何把小写数字转换成英文?

    2009-11-06 13:59:00
  • CentOS 7下安装与配置MySQL 5.7

    2024-01-26 17:41:50
  • javascript模拟鼠标自动点击链接

    2007-11-03 19:08:00
  • Python 中将二进制转换为整数的多种方法

    2023-01-11 17:30:53
  • jsp自定义标签之ifelse与遍历自定义标签示例

    2023-06-25 21:09:34
  • 浅析pandas随机排列与随机抽样

    2022-03-29 21:19:00
  • Python 判断文件或目录是否存在的实例代码

    2021-08-16 14:44:49
  • python实现百度关键词排名查询

    2023-01-19 12:26:58
  • asp程序运行速度测试

    2008-02-11 19:11:00
  • 浅谈慢SQL优化之索引的作用

    2024-01-24 20:31:54
  • GraphQL在Django中的使用教程

    2023-02-20 18:11:31
  • TensorFlow tf.nn.conv2d实现卷积的方式

    2021-07-19 08:54:28
  • Python-numpy实现灰度图像的分块和合并方式

    2021-06-14 16:24:27
  • python实现套接字创建

    2021-09-09 05:12:04
  • vue中watch监听器用法之deep、immediate、flush

    2024-04-27 16:13:35
  • asp之家 网络编程 m.aspxhome.com