django的每个对象权限的实现。
django-guardian的Python项目详细描述
django-guardian是每个对象权限的实现[1]在上面 Django的授权后端
文件
要求
- Python3.5+
- 支持的Django版本(当前为2.1+)
travis ci测试django版本2.1、2.2和master。
安装
要安装django-guardian,只需运行:
pip install django-guardian
配置
我们需要将django-guardian挂接到我们的项目中。
- 将guardian放入设置模块中的INSTALLED_APPS:
INSTALLED_APPS=(...'guardian',)
- 将额外的授权后端添加到settings.py:
AUTHENTICATION_BACKENDS=('django.contrib.auth.backends.ModelBackend',# default'guardian.backends.ObjectPermissionBackend',)
通过运行以下命令创建guardian数据库表:
python manage.py migrate
用法
在安装和项目挂钩之后,我们最终可以使用对象权限 用Django。
让我们快速开始:
>>>fromdjango.contrib.auth.modelsimportUser,Group>>>jack=User.objects.create_user('jack','jack@example.com','topsecretagentjack')>>>admins=Group.objects.create(name='admins')>>>jack.has_perm('change_group',admins)False>>>fromguardian.modelsimportUserObjectPermission>>>UserObjectPermission.objects.assign_perm('change_group',jack,obj=admins)<UserObjectPermission:admins|jack|change_group>>>>jack.has_perm('change_group',admins)True
当然,我们这里的杰克探员不能在全球范围内change\u group:
>>>jack.has_perm('change_group')False
管理集成
将这些模型的admin.ModelAdmin替换为GuardedModelAdmin。 在管理面板中应该有对象权限支持
例如:
fromdjango.contribimportadminfrommyapp.modelsimportAuthorfromguardian.adminimportGuardedModelAdmin# Old way:#class AuthorAdmin(admin.ModelAdmin):# pass# With object permissions supportclassAuthorAdmin(GuardedModelAdmin):passadmin.site.register(Author,AuthorAdmin)
[1] | Great paper about this feature is available at djangoadvent articles. |