Web2py - Controllo degli accessi

Autenticazione

Quasi tutte le applicazioni devono essere in grado di autenticare gli utenti e impostare le autorizzazioni. web2py viene fornito con un controllo degli accessi basato sui ruoli ampio e personalizzabilemechanism.web2py. Supporta anche i protocolli, come CAS, OpenID, OAuth 1.0, LDAP, PAM, X509 e molti altri.

web2py include un meccanismo noto come meccanismo di controllo degli accessi basato sui ruoli (RBAC) che è un approccio per limitare l'accesso al sistema agli utenti autorizzati. La classe web2py che implementa RBAC è chiamata Auth.

Guarda lo schema riportato di seguito.

Auth definisce le seguenti tabelle:

Suor n Nome e descrizione tabella
1

auth_user

memorizza il nome, l'indirizzo e-mail, la password e lo stato degli utenti.

2

auth_group

memorizza gruppi o ruoli per gli utenti in una struttura molti-a-molti

3

auth_membership

Memorizza le informazioni dei collegamenti utenti e gruppi in una struttura molti-a-molti

4

auth_permission

La tabella collega gruppi e autorizzazioni.

5

auth_event

registra le modifiche nelle altre tabelle e l'accesso riuscito

6

auth_cas

Viene utilizzato per il servizio di autenticazione centrale

Personalizzazione dell'autenticazione

Esistono due modi per personalizzare Auth.

  • Per definire un costume db.auth_user tavolo da zero.

  • Lascia che web2py definisca il file auth tavolo.

Esaminiamo l'ultimo metodo per definire il file authtavolo. Neldb.py modello, sostituire la riga seguente -

auth.define_tables()

Sostituiscilo con il seguente codice -

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)

Il presupposto è che ogni utente sia composto da numero di telefono, nome utente e indirizzo.

auth.settings.extra_fieldsè un dizionario di campi extra. La chiave è il nome della tabella di autenticazione a cui aggiungere i campi aggiuntivi. Il valore è un elenco di campi aggiuntivi. Qui abbiamo aggiunto due campi extra,phone_number and address.

usernamedeve essere trattato in modo speciale, perché è coinvolto nel processo di autenticazione, che normalmente si basa sul campo email. Passando l'argomento nomeutente alla riga seguente, web2py viene informato che vogliamo il campo nome utente e che vogliamo usarlo per il login invece del campo email. Agisce come una chiave primaria.

auth.define_tables(username = True)

Il nome utente viene considerato come un valore univoco. Ci possono essere casi in cui la registrazione avviene al di fuori del normale modulo di registrazione. Succede anche che il nuovo utente sia costretto ad effettuare il login, per completare la propria registrazione.

Questo può essere fatto utilizzando un campo fittizio, complete_registration che è impostato su False per impostazione predefinita, ed è impostato su True quando aggiornano il loro profilo.

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)

Questo scenario può prevedere che i nuovi utenti, al momento del login, completino la loro registrazione.

In db.py, nella cartella dei modelli, possiamo aggiungere il seguente codice -

if auth.user and not auth.user.complete_registration:
if not (request.controller,request.function) == ('default','user'):
   redirect(URL('default','user/profile'))

Ciò costringerà i nuovi utenti a modificare il proprio profilo secondo i requisiti.

Autorizzazione

È il processo di concessione di un accesso o di autorizzazione di qualcosa agli utenti.

In web2py una volta che il nuovo utente è stato creato o registrato, viene creato un nuovo gruppo per contenere l'utente. Il ruolo del nuovo utente è convenzionalmente definito come“user_[id]” dove id è l'identificazione univoca dell'utente.

Il valore predefinito per la creazione del nuovo gruppo è:

auth.settings.create_user_groups = "user_%(id)s"

La creazione dei gruppi tra gli utenti può essere disabilitata da:

auth.settings.create_user_groups = None

La creazione, la concessione dell'accesso a membri e autorizzazioni particolari può essere ottenuta in modo programmatico anche con l'aiuto di appadmin.

Alcune delle implementazioni sono elencate come segue:

Suor n Comando e utilizzo
1

auth.add_group('role', 'description')

restituisce l'id del gruppo appena creato.

2

auth.del_group(group_id)

Elimina il gruppo con l'id specificato

3

auth.del_group(auth.id_group('user_7'))

Elimina il gruppo di utenti con l'identificazione fornita.

4

auth.user_group(user_id)

Restituisce il valore dell'id del gruppo associato in modo univoco per l'utente specificato.

5

auth.add_membership(group_id, user_id)

Restituisce il valore di user_id per il group_id specificato

6

auth.del_membership(group_id, user_id)

Revoca l'accesso a member_id, ovvero user_id dal gruppo specificato.

7

auth.has_membership(group_id, user_id, role)

Controlla se user_id appartiene al gruppo specificato.

Central Authentication Service (CAS)

web2py fornisce uno standard del settore, vale a dire Client Authentication Service - CAS sia per il client che per il server web2py integrato. È uno strumento di autenticazione di terze parti.

È un protocollo aperto per l'autenticazione distribuita. Il funzionamento di CAS è il seguente:

  • Se l'utente visita il sito web, il protocollo controlla se l'utente è autenticato.

  • Se l'utente non è autenticato nell'applicazione, il protocollo reindirizza alla pagina in cui l'utente può registrarsi o accedere all'applicazione.

  • Se la registrazione è completata, l'utente riceve un'e-mail. La registrazione non è completa fino a quando ea meno che l'utente non abbia verificato l'e-mail.

  • Dopo la corretta registrazione, l'utente viene autenticato con la chiave, utilizzata dall'appliance CAS.

  • La chiave viene utilizzata per ottenere le credenziali dell'utente tramite richiesta HTTP, che è impostata in background.