ホームページ >バックエンド開発 >Python チュートリアル >Django フレームワークにおけるアクセス許可制御テクニック (パート 2)

Django フレームワークにおけるアクセス許可制御テクニック (パート 2)

WBOY
WBOYオリジナル
2023-06-17 19:08:231179ブラウズ

Django フレームワークにおけるアクセス許可制御スキル (パート 2)

Django フレームワークでは、アクセス許可制御は非常に重要な部分です。前回の記事では、組み込みの権限認証システムやデコレータベースの権限制御の使用など、Django フレームワークにおける基本的な権限制御手法をいくつか紹介しました。この記事では、Django フレームワークにおける他のアクセス許可制御手法について引き続き調査していきます。

  1. カスタム認証バックエンド

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']
  1. 詳細な権限制御には django-guardian を使用します
#django-guardian は、Django フレームワークの非常に強力なサードパーティ アプリケーションであり、きめ細かい権限制御機能を提供します。 Django の組み込み権限認証システムと比較して、django-guardian はより柔軟でカスタマイズされた権限制御方法を提供します。

django-guardian の使用方法は非常に簡単で、インストールして Django 設定ファイルに AUTHENTICATION_BACKENDS と AUTHORIZATION_BACKENDS を指定するだけです。例:

# 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 例外が自動的にスローされます。

    ルールベースの権限制御に django-rules を使用する
django-rules も、ルールベースの権限制御機能を提供する非常に実用的なサードパーティ アプリケーションです。 django-guardian と比較すると、django-rules はよりシンプルで軽量です。

django-rules の使用は django-guardian の使用と似ており、インストールして Django 設定ファイルに AUTHENTICATION_BACKENDS と AUTHORIZATION_BACKENDS を指定するだけです。例:

# 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。