项目地址:https://github.com/django-guardian/django-guardian
官方文档:https://django-guardian.readthedocs.io/en/stable/
中文介绍:https://www.jianshu.com/p/404fd39d5efc
django-guardian
是一个对象权限的框架。
对象权限是一种对象颗粒度上的权限机制,它允许为每个具体对象授权。
Django
其实包含了 object permission 的框架,但没有具体实现,object permission 的实现需要借助第三方 app django-guardian**,**我们在开发中用调用 django guradian
封装好的方法即可。
Tutorial
安装:
1
$ pip install django-guardian
配置:
在
INSTALLED_APPS
中添加一个该模块:1 2 3 4
INSTALLED_APPS = ( ... 'guardian', )
在
settings.py
中新添加一个数据AUTENTICATION_BACKENDS
:1 2 3 4
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', # default 'guardian.backends.ObjectPermissionBackend', )
然后生成
guardian
的数据表:1
$ python manage.py migrate
给对象赋权:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
>>> from django.contrib.auth.models import User, Group >>> jack = User.objects.create_user('jack', 'jack@example.com', 'topsecretagentjack') >>> admins = Group.objects.create(name='admins') >>> jack.has_perm('change_group', admins) False >>> >>> # 关键 >>> from guardian.models import UserObjectPermission >>> UserObjectPermission.objects.assign_perm('change_group', jack, obj=admins) <UserObjectPermission: admins | jack | change_group> >>> >>> >>> jack.has_perm('change_group', admins) True
admin-site
界面中:1 2 3 4 5 6 7 8 9 10 11 12 13
from django.contrib import admin from myapp.models import Author from guardian.admin import GuardedModelAdmin # Old way: #class AuthorAdmin(admin.ModelAdmin): # pass # With object permissions support class AuthorAdmin(GuardedModelAdmin): pass admin.site.register(Author, AuthorAdmin)