TurboGears - Autorizzazione e autenticazione

Un'applicazione TurboGears viene creata dalle opzioni di avvio rapido e di configurazione dell'app del toolkit del cambio, che ha il supporto di autorizzazione e autenticazione abilitato per impostazione predefinita. I modelli dichiarati in auth.py vengono impostati e inizializzati secondo i valori assegnati in bootstrap.py.

I seguenti modelli sono dichiarati in auth.py -

Modello utente

Il modello utente contiene il design di una tabella tg_user. Questa tabella è utilizzata dal pacchetto repose.who. Questo pacchetto repose.who è una libreria di autenticazione potente ed estensibile per le applicazioni WSGI. La struttura di un modello utente è la seguente:

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)

Questo modello di gruppo contiene la definizione tabella tg_group. La sua definizione è data in auth.py come segue:

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)

Viene impostato anche un altro modello di autorizzazione, che contiene la definizione dell'autorizzazione.

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

Al momento della configurazione dei modelli, in queste tabelle vengono aggiunti i seguenti dati:

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)

Modello predicato

Il modulo predicati nel pacchetto tg contiene le definizioni per i controllori dei predicati. Un predicato è una condizione che deve essere soddisfatta affinché l'utente possa accedere all'origine richiesta. Tale predicato, o condizione, può essere costituito da più predicati: quelli sono chiamati predicati composti. I controller di azione, o controller, possono avere un solo predicato, sia esso singolo o composto.

Se un utente non è connesso o non dispone delle autorizzazioni appropriate, questo verificatore di predicati genera un 401 (HTTP non autorizzato), che viene rilevato dal middleware repoze.who per visualizzare la pagina di accesso che consente all'utente di accedere e reindirizzare il l'utente torna alla pagina corretta quando hanno finito.

Le diverse condizioni o predicati definiti nel modulo tg.predicates sono:

Sr.No. Modulo e descrizione tg.predicates
1

All

Controlla se tutti i predicati specificati sono soddisfatti

2

Any

Controlla se almeno uno dei predicati specificati è soddisfatto

3

is_user

Verificare che il nome utente dell'utente autenticato sia quello specificato

4

in_group

Verifica che l'utente appartenga al gruppo specifico.

5

in_all_groups

Verificare che l'utente appartenga a tutti i gruppi specificati.

6

in_any_group

Verificare che l'utente appartenga ad almeno uno dei gruppi specificati.

7

is_anonymous

Verifica che l'utente corrente sia anonimo.

8

has_permission

Verificare che l'utente corrente disponga dell'autorizzazione specificata.

9

has_all_permissions

Verificare che all'utente corrente siano state concesse tutte le autorizzazioni specificate.

10

has_any_permission

Verifica che l'utente disponga di almeno una delle autorizzazioni specificate.

Ad esempio, se hai un predicato, che è grant access user belonging to customers group, quindi puoi utilizzare il seguente controllore dei predicati integrato:

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

Il seguente verificatore di predicati concederà l'accesso all'utente "root" oa chiunque disponga dell'autorizzazione "gestisci":

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