Github: https://github.com/django-guardian/django-guardian
ジャンゴ・ガーディアン
django-guardian
は、Djangoの認可バックエンドの上にあるオブジェクトごとのパーミッション[1]の実装です
ドキュメンテーション
オンラインドキュメントはhttps://django-guardian.readthedocs.io/で入手できます 。
要件
- Python 2.7または3.4+
- Djangoのサポートされているバージョン(現在1.8+)
Travis CIは、Djangoバージョン1.8,1.10,1.11、および2.0についてテストします。
インストール
django-guardian
をインストールするには、次のコマンドを実行します。
pip install django-guardian
構成
私たちはプロジェクトにdjango-guardian
をフックする必要があります。
- 設定モジュールであなたの
INSTALLED_APPS
guardian
を入れてください:
INSTALLED_APPS = (
...
'guardian',
)
- 余分な認可バックエンドを
settings.py
追加settings.py
:
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend', # default
'guardian.backends.ObjectPermissionBackend',
)
-
以下を実行して
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パネル内のオブジェクト権限をサポートするモデルのGuardedModelAdmin
、 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)
[1] | この機能に関する素晴らしい論文は、 djangoadventの記事で入手できます。 |