Django フレームワークにおけるアクセス許可制御スキル (パート 2)
Django フレームワークでは、アクセス許可制御は非常に重要な部分です。前回の記事では、組み込みの権限認証システムやデコレータベースの権限制御の使用など、Django フレームワークにおける基本的な権限制御手法をいくつか紹介しました。この記事では、Django フレームワークにおける他のアクセス許可制御手法について引き続き調査していきます。
Django フレームワークでは、カスタム認証バックエンドを使用して、カスタマイズされた認証ロジックを実装できます。 Django の認証バックエンド クラスを継承し、その認証メソッドを実装することで、独自の認証ロジックを定義できます。たとえば、カスタム認証バックエンドを使用して、LDAP または OAuth ベースの認証を実装できます。
次は、カスタム認証バックエンドを使用して LDAP ベースの認証を実装する例です:
from django.contrib.auth.backends import BaseBackend import ldap class LDAPBackend(BaseBackend): def authenticate(self, request, username=None, password=None, **kwargs): ldap_server = "ldap://example.com" ldap_base_dn = "ou=people,dc=example,dc=com" conn = ldap.initialize(ldap_server) try: conn.simple_bind_s("uid=%s,%s" % (username, ldap_base_dn), password) return User.objects.get(username=username) except ldap.INVALID_CREDENTIALS: return None
上記の例では、Django の BaseBackend クラスを継承し、その中に認証メソッドを実装して定義します。独自の認証ロジック。この方法では、Python の ldap モジュールを使用して LDAP サーバーに接続し、simple_bind_s メソッドを通じてユーザー名とパスワードが正しいことを確認します。検証が成功すると、User オブジェクトが返されます。
カスタム認証バックエンドの作成が完了したら、Django 設定ファイルで認証バックエンド クラスを指定する必要があります:
AUTHENTICATION_BACKENDS = ['path.to.LDAPBackend']
# settings.py AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',) INSTALLED_APPS = ( # ... 'guardian', ) MIDDLEWARE_CLASSES = ( # ... 'guardian.middleware.PermissionDeniedMiddleware', ) AUTHORIZATION_BACKENDS = ( 'guardian.backends.ObjectPermissionBackend', )django-guardian は、モデル内の特定のオブジェクトへのアクセスを制御するために使用できるいくつかのデコレーターを提供します。例:
from django.views.generic import DetailView from guardian.decorators import permission_required from myapp.models import MyModel @permission_required('myapp.view_mymodel', (MyModel, 'pk', 'pk')) class MyModelDetailView(DetailView): model = MyModel上の例では、permission_required デコレータを使用して MyModel のアクセス許可を制御しました。デコレータは、検証する権限とオブジェクト情報を指定する必要があります。権限の検証が失敗した場合、PermissionDenied 例外が自動的にスローされます。
# settings.py INSTALLED_APPS = ( # ... 'rules', ) AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',) AUTHORIZATION_BACKENDS = ('rules.permissions.ObjectPermissionBackend',)django-rules をアクセス許可制御に使用するには、それぞれに条件と結果が含まれる一連のルールを定義する必要があります。条件が満たされている場合は、結果の操作が実行され、そうでない場合は実行されません。例:
from rules import rule from myapp.models import MyModel @rule('view', 'myapp.view_mymodel') def can_view_mymodel(user, mymodel): return True @rule('change', 'myapp.change_mymodel') def can_change_mymodel(user, mymodel): return user.is_superuser or user == mymodel.user上の例では、MyModel オブジェクトを表示および変更する権限を制御する 2 つのルールを定義しました。各ルールでは、ルール デコレータを使用して条件と結果を定義します。許可判定の条件にはuserとmymodelの2つのパラメータを渡す必要があります。権限が渡されると、以降の操作を引き続き実行できます。 ルールを記述した後、ルールを Django に追加する必要があります:
# settings.py RULES_MODULE = 'myapp.rules'上の例では、RULES_MODULE を使用して、ルールが配置されている Python モジュールを指定します。このようにして、Django は起動時にルールを自動的にロードできます。 概要Django フレームワークでは、アクセス許可制御は非常に重要かつ不可欠な機能です。上記で紹介したいくつかのテクニックを通じて、基本的または複雑な権限制御機能を簡単に実装できます。組み込みの認証システム、デコレータベースの権限制御、カスタム認証バックエンド、django-guardian、または django-rules のいずれを使用する場合でも、特定のビジネス ニーズに基づいて最適な権限制御方法を選択できます。
以上がDjango フレームワークにおけるアクセス許可制御テクニック (パート 2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。