Web2py - Zugriffskontrolle
Authentifizierung
Fast jede Anwendung muss in der Lage sein, Benutzer zu authentifizieren und Berechtigungen festzulegen. web2py verfügt über eine umfassende und anpassbare rollenbasierte Zugriffssteuerungmechanism.web2py. Es unterstützt auch die Protokolle wie CAS, OpenID, OAuth 1.0, LDAP, PAM, X509 und viele mehr.
web2py enthält einen Mechanismus, der als RBAC (Role Based Access Control Mechanism) bezeichnet wird und einen Ansatz zur Einschränkung des Systemzugriffs auf autorisierte Benutzer darstellt. Die web2py-Klasse, die RBAC implementiert, heißt Auth.
Schauen Sie sich das unten angegebene Schema an.
Auth definiert die folgenden Tabellen -
Sr.Nr. | Tabellenname & Beschreibung |
---|---|
1 | auth_user speichert den Namen, die E-Mail-Adresse, das Passwort und den Status des Benutzers. |
2 | auth_group speichert Gruppen oder Rollen für Benutzer in einer Viele-zu-Viele-Struktur |
3 | auth_membership Speichert die Informationen von Linkbenutzern und -gruppen in einer Viele-zu-Viele-Struktur |
4 | auth_permission Die Tabelle verknüpft Gruppen und Berechtigungen. |
5 | auth_event Protokolliert Änderungen in den anderen Tabellen und erfolgreichen Zugriff |
6 | auth_cas Es wird für den zentralen Authentifizierungsdienst verwendet |
Customizing Auth
Es gibt zwei Möglichkeiten, Auth anzupassen.
So definieren Sie eine benutzerdefinierte db.auth_user Tisch von Grund auf neu.
Lassen Sie web2py das definieren auth Tabelle.
Schauen wir uns die letzte Methode zur Definition der authTabelle. In demdb.py Modell, ersetzen Sie die folgende Zeile -
auth.define_tables()
Ersetzen Sie es durch den folgenden Code -
auth.settings.extra_fields['auth_user'] = [
Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}')),
Field('address','text')
]
auth.define_tables(username = True)
Es wird davon ausgegangen, dass jeder Benutzer aus Telefonnummer, Benutzername und Adresse besteht.
auth.settings.extra_fieldsist ein Wörterbuch mit zusätzlichen Feldern. Der Schlüssel ist der Name der Authentifizierungstabelle, zu der die zusätzlichen Felder hinzugefügt werden sollen. Der Wert ist eine Liste zusätzlicher Felder. Hier haben wir zwei zusätzliche Felder hinzugefügt,phone_number and address.
usernamemuss auf besondere Weise behandelt werden, da es am Authentifizierungsprozess beteiligt ist, der normalerweise auf dem E-Mail-Feld basiert. Wenn Sie das Argument "Benutzername" an die folgende Zeile übergeben, wird web2py darüber informiert, dass das Feld "Benutzername" verwendet werden soll und dass es anstelle des E-Mail-Felds für die Anmeldung verwendet werden soll. Es wirkt wie ein Primärschlüssel.
auth.define_tables(username = True)
Der Benutzername wird als eindeutiger Wert behandelt. Es kann Fälle geben, in denen die Registrierung außerhalb des normalen Registrierungsformulars erfolgt. Es kommt auch vor, dass der neue Benutzer gezwungen ist, sich anzumelden, um seine Registrierung abzuschließen.
Dies kann über ein Dummy-Feld erfolgen. complete_registration das ist eingestellt auf False standardmäßig und ist auf eingestellt True wenn sie ihr Profil aktualisieren.
auth.settings.extra_fields['auth_user'] = [
Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}'),
comment = "i.e. 123-123-1234"),
Field('address','text'),
Field('complete_registration',default = False,update = True,
writable = False, readable = False)
]
auth.define_tables(username = True)
In diesem Szenario können die neuen Benutzer bei der Anmeldung möglicherweise ihre Registrierung abschließen.
Im db.pyIm Modellordner können wir den folgenden Code anhängen:
if auth.user and not auth.user.complete_registration:
if not (request.controller,request.function) == ('default','user'):
redirect(URL('default','user/profile'))
Dadurch werden die neuen Benutzer gezwungen, ihr Profil gemäß den Anforderungen zu bearbeiten.
Genehmigung
Es ist der Prozess, den Benutzern Zugriff zu gewähren oder ihnen die Erlaubnis zu geben.
In web2py wird nach dem Erstellen oder Registrieren des neuen Benutzers eine neue Gruppe erstellt, die den Benutzer enthält. Die Rolle des neuen Benutzers wird üblicherweise als bezeichnet“user_[id]” Dabei ist id die eindeutige Identifikation des Benutzers.
Der Standardwert für die Erstellung der neuen Gruppe ist -
auth.settings.create_user_groups = "user_%(id)s"
Die Erstellung der Gruppen unter den Benutzern kann deaktiviert werden durch:
auth.settings.create_user_groups = None
Das Erstellen, Gewähren des Zugriffs auf bestimmte Mitglieder und Berechtigungen kann programmgesteuert auch mithilfe von Appadmin erfolgen.
Einige der Implementierungen sind wie folgt aufgeführt:
Sr.Nr. | Befehl & Verwendung |
---|---|
1 | auth.add_group('role', 'description') Gibt die ID der neu erstellten Gruppe zurück. |
2 | auth.del_group(group_id) Löscht die Gruppe mit der angegebenen ID |
3 | auth.del_group(auth.id_group('user_7')) Löscht die Benutzergruppe mit der angegebenen Identifikation. |
4 | auth.user_group(user_id) Gibt den Wert der ID der Gruppe zurück, die dem angegebenen Benutzer eindeutig zugeordnet ist. |
5 | auth.add_membership(group_id, user_id) Gibt den Wert von user_id für die angegebene group_id zurück |
6 | auth.del_membership(group_id, user_id) Widerruft den Zugriff auf die angegebene member_id, dh user_id aus der angegebenen Gruppe. |
7 | auth.has_membership(group_id, user_id, role) Überprüft, ob user_id zur angegebenen Gruppe gehört. |
Zentraler Authentifizierungsdienst (CAS)
web2py bietet einen Industriestandard, nämlich Client Authentication Service - CAS für Client und Server, das in web2py integriert ist. Es ist ein Authentifizierungstool eines Drittanbieters.
Es ist ein offenes Protokoll für die verteilte Authentifizierung. Die Arbeitsweise von CAS ist wie folgt:
Wenn der Benutzer die Website besucht, prüft das Protokoll, ob der Benutzer authentifiziert ist.
Wenn der Benutzer nicht bei der Anwendung authentifiziert ist, leitet das Protokoll zu der Seite weiter, auf der sich der Benutzer registrieren oder bei der Anwendung anmelden kann.
Wenn die Registrierung abgeschlossen ist, erhält der Benutzer eine E-Mail. Die Registrierung ist erst abgeschlossen, wenn der Benutzer die E-Mail überprüft hat.
Nach erfolgreicher Registrierung wird der Benutzer mit dem Schlüssel authentifiziert, der von der CAS-Appliance verwendet wird.
Der Schlüssel wird verwendet, um die Anmeldeinformationen des Benutzers über eine HTTP-Anforderung abzurufen, die im Hintergrund festgelegt wird.