TurboGears - autoryzacja i uwierzytelnianie
Aplikacja TurboGears jest tworzona za pomocą opcji szybkiego startu i konfiguracji aplikacji zestawu narzędzi skrzyni biegów, która ma domyślnie włączoną obsługę autoryzacji i uwierzytelniania. Modele zadeklarowane w auth.py są konfigurowane i inicjalizowane zgodnie z wartościami przypisanymi w pliku bootstrap.py.
Następujące modele są zadeklarowane w auth.py -
Model użytkownika
Model użytkownika zawiera projekt tabeli tg_user. Ta tabela jest używana przez pakiet repose.who. Ten pakiet repose.who jest potężną, a także rozszerzalną biblioteką uwierzytelniania dla aplikacji WSGI. Struktura modelu użytkownika jest następująca -
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)
Ten model grupowy zawiera definicję tabeli tg_group. Jego definicja jest podana w auth.py w następujący sposób -
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)
Skonfigurowane jest również inne uprawnienie modelu, które zawiera definicję uprawnienia.
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))
W momencie tworzenia modeli w tych tabelach dodaje się następujące dane -
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)
Model predykatu
Moduł predykatów w pakiecie tg zawiera definicje weryfikatorów predykatów. Predykat to warunek, który musi być spełniony, aby użytkownik mógł uzyskać dostęp do żądanego źródła. Taki predykat lub warunek może składać się z większej liczby predykatów - nazywamy je predykatami złożonymi. Kontrolery akcji lub kontrolery mogą mieć tylko jeden predykat, pojedynczy lub złożony.
Jeśli użytkownik nie jest zalogowany lub nie ma odpowiednich uprawnień, ten moduł sprawdzania predykatów zgłasza 401 (HTTP Unauthorized), który jest przechwytywany przez repoze. Które oprogramowanie pośredniczące wyświetla stronę logowania umożliwiającą użytkownikowi zalogowanie się i przekierowuje użytkownik z powrotem na właściwą stronę, kiedy to zrobią.
Różne warunki lub predykaty zdefiniowane w module tg.predicates to -
Sr.No. | tg.predicates moduł i opis |
---|---|
1 | All Sprawdź, czy wszystkie określone predykaty są spełnione |
2 | Any Sprawdź, czy co najmniej jeden z określonych predykatów jest spełniony |
3 | is_user Sprawdź, czy podana jest nazwa uwierzytelnionego użytkownika |
4 | in_group Sprawdź, czy użytkownik należy do określonej grupy. |
5 | in_all_groups Sprawdź, czy użytkownik należy do wszystkich określonych grup. |
6 | in_any_group Sprawdź, czy użytkownik należy do co najmniej jednej z określonych grup. |
7 | is_anonymous Sprawdź, czy aktualny użytkownik jest anonimowy. |
8 | has_permission Sprawdź, czy bieżący użytkownik ma określone uprawnienia. |
9 | has_all_permissions Sprawdź, czy bieżącemu użytkownikowi nadano wszystkie określone uprawnienia. |
10 | has_any_permission Sprawdź, czy użytkownik ma co najmniej jedno z określonych uprawnień. |
Na przykład, jeśli masz predykat, którym jest grant access user belonging to customers group, możesz użyć następującego wbudowanego narzędzia do sprawdzania predykatów -
from tg.predicates import in_group
p in_group(‘customers’)
Poniższy program do sprawdzania predykatów przyzna dostęp użytkownikowi `` root '' lub każdemu z uprawnieniami do zarządzania -
from tg.predicates import Any, is_user, has_permission
p = Any(is_user('root'), has_permission('manage'),
sg = 'Only administrators can remove blog posts')