原文: http://www.jianshu.com/p/01126437e8a4git
所謂權限系統 是針對某個用戶/組的 github
django 自帶權限系統 咱們這裏統稱爲全局權限。 通俗的說就是 指定用戶/組有對某個model的權限django
主要有2個概念 : 用戶全局權限,組全局權限。app
用戶全局權限管理:post
myuser.user_permissions = [permission_list]
myuser.user_permissions.add(permission, permission, ...) #增長權限
myuser.user_permissions.remove(permission, permission, ...) #刪除權限
myuser.user_permissions.clear() #清空權限
##############################################################
# 注:上面的permission爲django.contrib.auth.Permission類型的實例
##############################################################
組全局權限管理:測試
group.permissions = [permission_list]
group.permissions.add(permission, permission, ...)
group.permissions.remove(permission, permission, ...)
group.permissions.clear()
檢查全局權限:ui
myuser.has_perm('myapp.fix_car')
列出全局權限:spa
user.get_all_permissions() #方法列出用戶的全部權限,返回值是permission name的list對象
user.get_group_permissions() #方法列出用戶所屬group的權限,返回值是permission name的listrem
全局權限裝飾器
from django.contrib.auth.decorators import permission_required
@permission_required('car.drive_car')
def my_view(request):
基於Django-guardian的object permission的應用
github: Django-guardian
對象權限即用戶A 有對象B 的權限
from guardian.shortcuts import assign_perm, get_perms from guardian.core import ObjectPermissionChecker from guardian.decorators import permission_required
assign_perm 賦權
get_perms 返回對象權限 ### 測試了很久沒有找到返回對象權限+全局權限
@method_decorator(permission_required('main.delete_post', (models.Post, 'id', 'pk'), accept_global_perms=True))
3個參數 後2個可選
當指定某個對象 而且accept_global_perms爲False時 只檢查對象權限
否者 對象權限和全局權限一塊兒檢查
accept_global_perms 默認爲False