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我是否需要构造一个带有*非final*但不可变字段的不可变类?   java如何使用jaxb读取属性?   java为什么不打印空值以外的任何内容?   java Struts2如何在不使用struts的情况下重定向到操作。xml?   java方法参数未在其实现中使用   在Java中更改终端内部的变量   Spring中的java依赖项注入失败   java如何使用getAttribute Selenium防止获取重复的HREF   优先级队列的java顺序不符合预期   java如何使用Spring TaskExecutor在应用程序的所有请求中使用单个任务池   java Firebase RecyclerView不会从数据库中检索项目并将其显示在屏幕上。屏幕是空的   java将YUV_420_888转换为字节数组   spring停止使用Java缓存文件   java在执行maven clean安装时,我在eclipse智能家居中遇到了这种错误   stream Java=下载缓冲区未满?冲洗/缓冲是如何工作的?   查询SQL server时重置java JDBC连接   java如何避免在两个函数中使用相同的逻辑。   转换java。lang.Boolean到Scala Boolean