TurboGears - Autorisation et authentification

Une application TurboGears est créée par les options de démarrage rapide et d'application de configuration de la boîte à outils de la boîte de vitesses, qui a la prise en charge de l'autorisation et de l'authentification activée par défaut. Les modèles déclarés dans auth.py sont configurés et initialisés selon les valeurs attribuées dans bootstrap.py.

Les modèles suivants sont déclarés dans auth.py -

Modèle utilisateur

Le modèle User contient la conception d'une table tg_user. Cette table est utilisée par le package repose.who. Ce package repose.who est une bibliothèque d'authentification puissante et extensible pour les applications WSGI. La structure d'un modèle utilisateur est la suivante -

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)

Ce modèle de groupe contient la table de définition tg_group. Sa définition est donnée dans auth.py comme suit -

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)

Un autre modèle d'autorisation est également configuré, qui contient une définition d'autorisation.

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))

Au moment de la configuration des modèles, les données suivantes sont ajoutées dans ces tableaux -

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)

Modèle de prédicat

Le module prédicats du package tg contient des définitions pour les vérificateurs de prédicat. Un prédicat est une condition qui doit être remplie pour que l'utilisateur puisse accéder à la source demandée. Un tel prédicat, ou condition, peut être composé de plusieurs prédicats - ceux-ci sont appelés prédicats composés. Les contrôleurs d'action, ou contrôleurs, peuvent n'avoir qu'un seul prédicat, qu'il soit unique ou composé.

Si un utilisateur n'est pas connecté, ou n'a pas les autorisations appropriées, ce vérificateur de prédicat lance un 401 (HTTP non autorisé), qui est intercepté par le middleware repoze.who pour afficher la page de connexion permettant à l'utilisateur de se connecter et rediriger le l'utilisateur revient à la page appropriée une fois terminé.

Les différentes conditions ou prédicats définis dans le module tg.predicates sont -

N ° Sr. Module tg.predicates et description
1

All

Vérifiez si tous les prédicats spécifiés sont satisfaits

2

Any

Vérifiez si au moins un des prédicats spécifiés est satisfait

3

is_user

Vérifiez que le nom d'utilisateur de l'utilisateur authentifié est celui spécifié

4

in_group

Vérifiez que l'utilisateur appartient au groupe spécifique.

5

in_all_groups

Vérifiez que l'utilisateur appartient à tous les groupes spécifiés.

6

in_any_group

Vérifiez que l'utilisateur appartient à au moins l'un des groupes spécifiés.

sept

is_anonymous

Vérifiez que l'utilisateur actuel est anonyme.

8

has_permission

Vérifiez que l'utilisateur actuel dispose de l'autorisation spécifiée.

9

has_all_permissions

Vérifiez que l'utilisateur actuel dispose de toutes les autorisations spécifiées.

dix

has_any_permission

Vérifiez que l'utilisateur dispose d'au moins une des autorisations spécifiées.

Par exemple, si vous avez un prédicat, qui est grant access user belonging to customers group, vous pouvez alors utiliser le vérificateur de prédicat intégré suivant -

from tg.predicates import in_group
p in_group(‘customers’)

Le vérificateur de prédicat suivant accordera l'accès à l'utilisateur `` root '' ou à toute personne avec l'autorisation de `` gérer '' -

from tg.predicates import Any, is_user, has_permission
p = Any(is_user('root'), has_permission('manage'), 
   sg = 'Only administrators can remove blog posts')