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

相关文章
相关标签/搜索