原文:
所谓权限系统 是针对某个用户/组的
django 自带权限系统 我们这里统称为全局权限。 通俗的说就是 指定用户/组有对某个model的权限
主要有2个概念 : 用户全局权限,组全局权限。
用户全局权限管理:
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()
检查全局权限:
myuser.has_perm('myapp.fix_car')
列出全局权限:
user.get_all_permissions() #方法列出用户的所有权限,返回值是permission name的list
user.get_group_permissions() #方法列出用户所属group的权限,返回值是permission name的list
全局权限装饰器
from django.contrib.auth.decorators import permission_required@permission_required('car.drive_car')def my_view(request):
基于Django-guardian的object permission的应用
github:
对象权限即用户A 有对象B 的权限
from guardian.shortcuts import assign_perm, get_permsfrom guardian.core import ObjectPermissionCheckerfrom 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