dajngo 權限機制

原文: 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

相關文章
相關標籤/搜索