Django权限管理---自定义权限角色

Django权限管理的机制

  • Django权限管理的实现, 基于 User Group Permission,这个权限管理机制, 将模型类中的某个属于model的permission赋予user或者group, group在后台管理中就是角色的意思

默认的权限

  • 在INSTALL_APPS 里设置了django.contrib.auth 时, 在一次迁移的时候,将为模型类创建四个默认权限: 添加. 修改. 删除和查看

  • Django自动生成的表结构
    在这里插入图片描述在这里插入图片描述

  • auth_group的表结构
    在这里插入图片描述

  • auto_group_permissions表结构
    在这里插入图片描述

  • auto_permission表结构
    在这里插入图片描述

以编程的方式的创建权限

  • 在项目中, auto_permission表中自动生成的权限可能不是我们需要的, 我们可以手动添加
from myapp.models import Tnews
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType

# 新闻表中权限
news_content_type = ContentType.objects.get_for_model(Tnews)
Permission.objects.update_or_create(codename='news_add', name='添加新闻', content_type=house_content_type)

添加角色

  • 项目中需要哪些角色, 自己添加哪些角色, 操作Group, 简介操作的是 auto_group表
from django.contrib.auth.models import Group
from rest_framework.viewsets import ModelViewSet

class RoleManagerView(ModelViewSet):
    """角色管理视图"""
    queryset = Group.objects.all()
    # 关闭分页
    # pagination_class = None
    serializer_class = serializes.RoleManagerSerializer

给角色Group赋权限

  • 获取这个Group的实例对象, 获取需要添加的permission对象, 给角色添加权限
from django.contrib.auth.models import Group
# 获取某个角色
instance = Group.objects.get(id=2)
# 获取所有权限列表
Permission.objects.all()
# 获取单条权限
permissino1 = Permission.objects.get(id=200)
# 将权限添加到Group中
instance.permissions.add(permissino1)
# 其他权限的操作
# 设置权限, 会清空之前的所有权限,传入一个权限列表
instance.permissions.set([permission1...])
# 清空所有的权限
instance.permissions.clear()
# 查看所有的权限
instance.permissions.all()

给用户赋角色

  • settings文件中设置好User模型类后, 迁移会生成 user表__groups 角色用户关系表, 查出group的对象, 用户添加这个组中
from django.contrib.auth.models import Group
from user.models import User
user = User.objects.get(id=1)
# 获取一个角色
group1 = Group.objects.get(id=1)
# 将该用户添加到这个组中
user.groups.add(group1)
# 其他操作
# 查看这个用户的所有的组
user.groups.all()
# 清空这个用户的组
user.groups.clear()
# 设置组, 会清空之前的所有组,传入一个组列表
user.groups.set([group1])

给用户赋值权限

  • User对象的user_permission字段管理用户的权限
user = User.objects.get(id=1)
user.user_permissions = [permission_list]
user.user_permissions.add(permission, permission,) #增加权限
user.user_permissions.remove(permission, permission,) #删除权限
user.user_permissions.clear() #清空权限
user.get_all_permissions() #列出用户的所有权限
user.get_group_permissions() # 列出用户所属group的权限

权限验证的使用

1. 装饰器函数使用

  • 在视图中验证权限 permission_required装饰器
from django.contrib.auth.decorators import login_required, permission_required

2. view视图中代码验证

if not request.user.has_perm('news.news_lb_manager')

3. 模板中使用

# 登录权限
{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}
# 是否有权限
{% if perms.news.news_lb_manager%}
有权限
{% endif %}
发布了19 篇原创文章 · 获赞 10 · 访问量 2457

猜你喜欢

转载自blog.csdn.net/qq_40125653/article/details/103575960
今日推荐