Django2.0-验证和授权(4)-Group 分组

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/abc666666_6/article/details/84202691

分组

  • 权限有很多,一个模型就有最少三个权限,如果一些用户拥有相同的权限,那么每次都要重复添加。
    这时候分组就可以帮解决这种问题了,可以把一些权限归类,然后添加到某个分组中,之后再把需要赋予这些权限的用户添加到这个分组中,就比较好管理了。

  • 分组使用的是django.contrib.auth.models.Group模型, 每个用户组拥有idname两个字段

  • 该模型在数据库被映射为auth_group数据表。


分组操作

  1. Group.object.create(group_name):创建分组。
  2. group.permissions:某个分组上的权限。多对多的关系。
    • group.permissions.add:添加权限。
    • group.permissions.remove:移除权限。
    • group.permissions.clear:清除所有权限。
    • user.get_group_permissions():获取用户所属组的权限。
  3. user.groups:某个用户上的所有分组。多对多的关系。来自PermissionsMixin
  • 使用(下面的InheritTwo是自定义的仿User模型)
from django.contrib.auth.models import ContentType, Permission, Group

def add_group(request):
    group = Group.objects.create(name="管理Demo")
    # 找到所有关于DemoModel的权限
    content_type = ContentType.objects.get_for_model(DemoModel)
    permissions = Permission.objects.filter(content_type=content_type)

    group.permissions.set(permissions)  # 设置权限
    group.save()  # 保存

    return HttpResponse("创建组成功")
def binding_user_group(request):
    group = Group.objects.filter(name="管理Demo").first()
    if group:
        user = InheritTwo.objects.first()
        user.groups.add(group)  # 父类PermissionsMixin有groups这个多对多字段
        user.save()
    else:
        print("no group")
    return HttpResponse('添加权限')
def search_user_group_permission(request):
    user = InheritTwo.objects.first()
    
    permissions = user.get_group_permissions()  # 获取用户所属组的权限
    for permission in permissions:
        print(permission)

    """
    判断user.permissions下有没有这个权限 
        有, 返回True
        没有 判断所属组下有没有这个权限
    """
    if user.has_perm('front.search_demo'):
        print("查找demo的权限")
    else:
        print("没有查找demo的权限")
    return HttpResponse("查询用户组权限")

在模板中使用权限

settings.TEMPLATES.OPTIONS.context_processors下,因为添加了django.contrib.auth.context_processors.auth上下文处理器,因此在模板中可以直接通过perms来获取用户的所有权限。

<body>
<h1>首页</h1>
{% if perms.front.search_demo %}
    <h3>查找demo</h3>

{% endif %}
</body>

猜你喜欢

转载自blog.csdn.net/abc666666_6/article/details/84202691