TurboGears - Autorisierung und Authentifizierung
Eine TurboGears-Anwendung wird durch Schnellstart- und Setup-App-Optionen des Getriebe-Toolkits erstellt, für das die Autorisierungs- und Authentifizierungsunterstützung standardmäßig aktiviert ist. Die in auth.py deklarierten Modelle werden gemäß den in bootstrap.py zugewiesenen Werten eingerichtet und initialisiert.
Die folgenden Modelle sind in auth.py deklariert -
Benutzermodell
Das Benutzermodell enthält den Entwurf einer tg_user-Tabelle. Diese Tabelle wird vom Paket repose.who verwendet. Dieses Paket repose.who ist sowohl eine leistungsstarke als auch eine erweiterbare Authentifizierungsbibliothek für WSGI-Anwendungen. Die Struktur eines Benutzermodells ist wie folgt:
class User(DeclarativeBase):
"""
__tablename__ = 'tg_user'
user_id = Column(Integer, autoincrement = True, primary_key=True)
user_name = Column(Unicode(16), unique = True, nullable = False)
email_address = Column(Unicode(255), unique = True,nullable=False)
display_name = Column(Unicode(255))
_password = Column('password', Unicode(128))
created = Column(DateTime, default = datetime.now)
Dieses Gruppenmodell enthält die Definitionstabelle tg_group. Seine Definition ist in auth.py wie folgt angegeben:
class Group(DeclarativeBase):
__tablename__ = 'tg_group'
group_id = Column(Integer, autoincrement = True,primary_key = True)
group_name = Column(Unicode(16),unique = True,nullable = False)
display_name = Column(Unicode(255))
created = Column(DateTime, default = datetime.now)
Es wird auch eine andere Modellberechtigung eingerichtet, die die Berechtigungsdefinition enthält.
class Permission(DeclarativeBase):
__tablename__ = 'tg_permission'
permission_id = Column(Integer,autoincrement = True,primary_key = True)
permission_name = Column(Unicode(63), unique = True, nullable = False)
description = Column(Unicode(255))
Zum Zeitpunkt der Einrichtung der Modelle werden die folgenden Daten in diese Tabellen aufgenommen:
u = model.User()
u.user_name = 'manager'
u.display_name = 'Example manager'
u.email_address = '[email protected]'
u.password = 'managepass'
model.DBSession.add(u)
g = model.Group()
g.group_name = 'managers'
g.display_name = 'Managers Group'
g.users.append(u)
model.DBSession.add(g)
p = model.Permission()
p.permission_name = 'manage'
p.description = 'This permission gives an administrative right'
p.groups.append(g)
model.DBSession.add(p)
u1 = model.User()
u1.user_name = 'editor'
u1.display_name = 'Example editor'
u1.email_address = '[email protected]'
u1.password = 'editpass'
model.DBSession.add(u1)
Prädikatmodell
Das Prädikatmodul im Paket tg enthält Definitionen für Prädikatprüfer. Ein Prädikat ist eine Bedingung, die erfüllt sein muss, damit der Benutzer auf die angeforderte Quelle zugreifen kann. Ein solches Prädikat oder eine solche Bedingung kann aus mehr Prädikaten bestehen - diese werden zusammengesetzte Prädikate genannt. Aktionscontroller oder Controller können nur ein Prädikat haben, sei es einzeln oder zusammengesetzt.
Wenn ein Benutzer nicht angemeldet ist oder nicht über die richtigen Berechtigungen verfügt, löst diese Prädikatprüfung einen 401 (HTTP Unauthorized) aus, der von der repoze.who-Middleware abgefangen wird, um die Anmeldeseite anzuzeigen, auf der sich der Benutzer anmelden und die umleiten kann Benutzer zurück zur richtigen Seite, wenn sie fertig sind.
Die verschiedenen Bedingungen oder Prädikate, die im Modul tg.predicates definiert sind, sind -
Sr.Nr. | tg.predicates Modul & Beschreibung |
---|---|
1 | All Überprüfen Sie, ob alle angegebenen Prädikate erfüllt sind |
2 | Any Überprüfen Sie, ob mindestens eines der angegebenen Prädikate erfüllt ist |
3 | is_user Überprüfen Sie, ob der Benutzername des authentifizierten Benutzers der angegebene ist |
4 | in_group Überprüfen Sie, ob der Benutzer zu der bestimmten Gruppe gehört. |
5 | in_all_groups Überprüfen Sie, ob der Benutzer zu allen angegebenen Gruppen gehört. |
6 | in_any_group Überprüfen Sie, ob der Benutzer zu mindestens einer der angegebenen Gruppen gehört. |
7 | is_anonymous Überprüfen Sie, ob der aktuelle Benutzer anonym ist. |
8 | has_permission Überprüfen Sie, ob der aktuelle Benutzer über die angegebene Berechtigung verfügt. |
9 | has_all_permissions Überprüfen Sie, ob dem aktuellen Benutzer alle angegebenen Berechtigungen erteilt wurden. |
10 | has_any_permission Überprüfen Sie, ob der Benutzer über mindestens eine der angegebenen Berechtigungen verfügt. |
Zum Beispiel, wenn Sie ein Prädikat haben, nämlich grant access user belonging to customers groupDann können Sie den folgenden integrierten Prädikatprüfer verwenden:
from tg.predicates import in_group
p in_group(‘customers’)
Die folgende Prädikatprüfung gewährt dem Root-Benutzer oder Personen mit der Berechtigung "Verwalten" Zugriff.
from tg.predicates import Any, is_user, has_permission
p = Any(is_user('root'), has_permission('manage'),
sg = 'Only administrators can remove blog posts')