django的每个对象权限的实现。

django-guardian的Python项目详细描述


https://travis-ci.org/django-guardian/django-guardian.svg?branch=devel

django-guardian是每个对象权限的实现[1]在上面 Django的授权后端

文件

在线文档可在https://django-guardian.readthedocs.io/找到。

要求

  • Python3.5+
  • 支持的Django版本(当前为2.1+)

travis ci测试django版本2.1、2.2和master。

安装

要安装django-guardian,只需运行:

pip install django-guardian

配置

我们需要将django-guardian挂接到我们的项目中。

  1. guardian放入设置模块中的INSTALLED_APPS
INSTALLED_APPS=(...'guardian',)
  1. 将额外的授权后端添加到settings.py
AUTHENTICATION_BACKENDS=('django.contrib.auth.backends.ModelBackend',# default'guardian.backends.ObjectPermissionBackend',)
  1. 通过运行以下命令创建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.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java初级SQLite Android应用程序无打印结果   java为什么这个方法在安卓中没有给我子网掩码   安卓在Java中发送HTTP头时出现问题   java将请求URL与web中的正确URL模式相匹配。xml   棋盘游戏AI中的java对象池   从键盘获取输入时,java变量获取未知值   InputStreamReader的Java替代品?   java如何将Springbean注入JSP2.0 SimpleTag?   列出Java转换为未知类型   tic-tac-toe TictaI.在Java中使用minimax不起作用   JavaSQLite连接和资源,良好实践   java从预使用图中删除节点   java如何处理ActiveMQ使用者骆驼路由的from()以进行容器内测试?   从客户端发送到服务器的Java消息   缓存会在不影响性能的情况下同时使java中几个工作进程的缓存失效   Java有多少字符串concat应该提示使用StringBuilder?   C++ Python,C/++,java…有比较音频信号的api吗?