跳转到主要内容

Django的按对象权限实现。

项目描述

https://github.com/django-guardian/django-guardian/workflows/Tests/badge.svg?branch=devel https://img.shields.io/pypi/v/django-guardian.svg https://img.shields.io/pypi/pyversions/django-guardian.svg

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

文档

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

要求

  • Python 3.5+

  • 支持的 Django 版本(目前为 2.2+)

GitHub Actions 在 Django 版本 2.2、3.0、3.1、3.2 和 main 上运行测试。

安装

要安装 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 的对象权限了。

让我们快速开始

>>> 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

当然,我们的代理杰克在这里无法全局地 change_group

>>> jack.has_perm('change_group')
False

管理员集成

对于需要在管理员面板中支持对象权限的那些模型,将 admin.ModelAdmin 替换为 GuardedModelAdmin

例如

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)

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分布

django-guardian-2.4.0.tar.gz (159.0 kB 查看散列值)

构建分布

django_guardian-2.4.0-py3-none-any.whl (106.1 kB 查看散列值)

Python 3

由以下组织支持