Django2.0-驗證和授權(4)-Group 分組
阿新 • • 發佈:2018-12-16
分組
-
許可權有很多,一個模型就有最少三個許可權,如果一些使用者擁有相同的許可權,那麼每次都要重複新增。
這時候分組就可以幫解決這種問題了,可以把一些許可權歸類,然後新增到某個分組中,之後再把需要賦予這些許可權的使用者新增到這個分組中,就比較好管理了。 -
分組使用的是
django.contrib.auth.models.Group
模型, 每個使用者組擁有id
和name
兩個欄位 -
該模型在資料庫被對映為
auth_group
資料表。
分組操作
Group.object.create(group_name)
:建立分組。group.permissions
group.permissions.add
:新增許可權。group.permissions.remove
:移除許可權。group.permissions.clear
:清除所有許可權。user.get_group_permissions()
:獲取使用者所屬組的許可權。
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>