1. 程式人生 > >Django2.0-驗證和授權(4)-Group 分組

Django2.0-驗證和授權(4)-Group 分組

分組

  • 許可權有很多,一個模型就有最少三個許可權,如果一些使用者擁有相同的許可權,那麼每次都要重複新增。
    這時候分組就可以幫解決這種問題了,可以把一些許可權歸類,然後新增到某個分組中,之後再把需要賦予這些許可權的使用者新增到這個分組中,就比較好管理了。

  • 分組使用的是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>