Heim  >  Artikel  >  Backend-Entwicklung  >  Berechtigungskontrolltechniken im Django-Framework (Teil 2)

Berechtigungskontrolltechniken im Django-Framework (Teil 2)

WBOY
WBOYOriginal
2023-06-17 19:08:231115Durchsuche

Fähigkeiten zur Berechtigungskontrolle im Django-Framework (Teil 2)

Im Django-Framework ist die Berechtigungskontrolle ein sehr wichtiger Teil. Im vorherigen Artikel haben wir einige grundlegende Berechtigungskontrolltechniken im Django-Framework vorgestellt, einschließlich der Verwendung des integrierten Berechtigungsauthentifizierungssystems und der dekoratorbasierten Berechtigungskontrolle. In diesem Artikel werden weiterhin andere Berechtigungskontrolltechniken im Django-Framework untersucht.

  1. Benutzerdefiniertes Authentifizierungs-Backend

Im Django-Framework können wir ein benutzerdefiniertes Authentifizierungs-Backend verwenden, um eine benutzerdefinierte Authentifizierungslogik zu implementieren. Indem wir die Authentifizierungs-Backend-Klasse von Django erben und ihre Authentifizierungsmethoden implementieren, können wir unsere eigene Authentifizierungslogik definieren. Beispielsweise können wir ein benutzerdefiniertes Authentifizierungs-Backend verwenden, um eine LDAP- oder OAuth-basierte Authentifizierung zu implementieren.

Das Folgende ist ein Beispiel für die Verwendung eines benutzerdefinierten Authentifizierungs-Backends zur Implementierung der LDAP-basierten Authentifizierung:

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

Im obigen Beispiel definieren wir unsere eigene Authentifizierungslogik, indem wir die BaseBackend-Klasse von Django erben und die Authentifizierungsmethode darin implementieren. Bei dieser Methode verwenden wir das LDAP-Modul von Python, um eine Verbindung zum LDAP-Server herzustellen und mithilfe der Methode simple_bind_s zu überprüfen, ob der Benutzername und das Kennwort korrekt sind. Wenn die Überprüfung erfolgreich ist, wird das User-Objekt zurückgegeben.

Nachdem wir mit dem Schreiben des benutzerdefinierten Authentifizierungs-Backends fertig sind, müssen wir die Authentifizierungs-Backend-Klasse in der Django-Einstellungsdatei angeben:

AUTHENTICATION_BACKENDS = ['path.to.LDAPBackend']
  1. Verwenden Sie Django-Guardian für eine differenzierte Berechtigungskontrolle.

Django-Guardian ist einer der Django Frameworks Eine sehr leistungsstarke Drittanbieteranwendung, die fein abgestimmte Berechtigungskontrollfunktionen bereitstellt. Im Vergleich zum integrierten Berechtigungsauthentifizierungssystem von Django bietet Django-Guardian eine flexiblere und individuellere Berechtigungskontrollmethode.

Die Verwendung von Django-Guardian ist sehr einfach. Sie müssen lediglich AUTHENTICATION_BACKENDS und AUTHORIZATION_BACKENDS in der Einstellungsdatei von Django installieren und angeben. Zum Beispiel:

# settings.py

AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)

INSTALLED_APPS = (
    # ...
    'guardian',
)

MIDDLEWARE_CLASSES = (
    # ...
    'guardian.middleware.PermissionDeniedMiddleware',
)

AUTHORIZATION_BACKENDS = (
    'guardian.backends.ObjectPermissionBackend',
)

django-guardian stellt einige Dekoratoren bereit, mit denen der Zugriff auf bestimmte Objekte im Modell gesteuert werden kann. Zum Beispiel:

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

Im obigen Beispiel haben wir den Dekorator „permission_required“ verwendet, um die Zugriffsberechtigungen von MyModel zu steuern. Der Dekorateur muss die zu überprüfenden Berechtigungen und Objektinformationen angeben. Wenn die Berechtigungsüberprüfung fehlschlägt, wird automatisch eine PermissionDenied-Ausnahme ausgelöst.

  1. Verwenden Sie django-rules für die regelbasierte Berechtigungskontrolle

django-rules ist eine weitere sehr praktische Drittanbieteranwendung, die regelbasierte Berechtigungskontrollfunktionen bietet. Im Vergleich zu Django-Guardian ist Django-Rules einfacher und leichtgewichtig.

Die Verwendung von Django-Rules ähnelt der Verwendung von Django-Guardian. Sie müssen lediglich AUTHENTICATION_BACKENDS und AUTHORIZATION_BACKENDS in der Django-Einstellungsdatei installieren und angeben. Zum Beispiel:

# settings.py

INSTALLED_APPS = (
    # ...
    'rules',
)

AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)

AUTHORIZATION_BACKENDS = ('rules.permissions.ObjectPermissionBackend',)

Die Verwendung von Django-Regeln zur Berechtigungskontrolle erfordert die Definition einer Reihe von Regeln, von denen jede eine Bedingung und ein Ergebnis enthält. Wenn die Bedingungen erfüllt sind, wird die Operation im Ergebnis ausgeführt, andernfalls wird sie nicht ausgeführt. Zum Beispiel:

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

Im obigen Beispiel haben wir zwei Regeln definiert, um die Berechtigungen zum Anzeigen und Ändern des MyModel-Objekts zu steuern. In jeder Regel verwenden wir den Regeldekorator, um Bedingungen und Ergebnisse zu definieren. In der Bedingung für die Berechtigungsbeurteilung müssen zwei Parameter, user und mymodel, übergeben werden. Wenn die Berechtigung erteilt wird, können Sie mit der Ausführung nachfolgender Vorgänge fortfahren.

Nachdem wir die Regeln geschrieben haben, müssen wir die Regeln zu Django hinzufügen:

# settings.py

RULES_MODULE = 'myapp.rules'

Im obigen Beispiel verwenden wir RULES_MODULE, um das Python-Modul anzugeben, in dem sich die Regeln befinden. Auf diese Weise kann Django die Regeln beim Start automatisch laden.

Zusammenfassung

Im Django-Framework ist die Berechtigungskontrolle eine sehr wichtige und wesentliche Funktion. Mit einigen der oben vorgestellten Techniken können wir problemlos grundlegende oder komplexe Berechtigungskontrollfunktionen implementieren. Unabhängig davon, ob wir das integrierte Authentifizierungssystem, die auf Dekoratoren basierende Berechtigungssteuerung, das benutzerdefinierte Authentifizierungs-Backend, Django-Guardian oder Django-Regeln verwenden, können wir basierend auf den spezifischen Geschäftsanforderungen die am besten geeignete Berechtigungssteuerungsmethode auswählen.

Das obige ist der detaillierte Inhalt vonBerechtigungskontrolltechniken im Django-Framework (Teil 2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn