Web2py - Contrôle d'accès

Authentification

Presque toutes les applications doivent pouvoir authentifier les utilisateurs et définir des autorisations. web2py est livré avec un contrôle d'accès basé sur les rôles étendu et personnalisablemechanism.web2py. Il prend également en charge les protocoles tels que CAS, OpenID, OAuth 1.0, LDAP, PAM, X509 et bien d'autres.

web2py inclut un mécanisme connu sous le nom de mécanisme de contrôle d'accès basé sur les rôles (RBAC) qui est une approche pour restreindre l'accès au système aux utilisateurs autorisés. La classe web2py qui implémente RBAC est appelée Auth.

Regardez le schéma ci-dessous.

Auth définit les tableaux suivants -

Sr.Non Nom et description de la table
1

auth_user

stocke le nom, l'adresse e-mail, le mot de passe et l'état des utilisateurs.

2

auth_group

stocke les groupes ou les rôles pour les utilisateurs dans une structure plusieurs-à-plusieurs

3

auth_membership

Stocke les informations des utilisateurs et des groupes de liens dans une structure plusieurs-à-plusieurs

4

auth_permission

Le tableau relie les groupes et les autorisations.

5

auth_event

enregistre les modifications dans les autres tables et l'accès réussi

6

auth_cas

Il est utilisé pour le service d'authentification central

Personnalisation de l'authentification

Il existe deux façons de personnaliser Auth.

  • Pour définir une personnalisation db.auth_user table à partir de zéro.

  • Laissez web2py définir le auth table.

Regardons la dernière méthode pour définir le authtable. dans ledb.py modèle, remplacez la ligne suivante -

auth.define_tables()

Remplacez-le par le code suivant -

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)

L'hypothèse est que chaque utilisateur se compose d'un numéro de téléphone, d'un nom d'utilisateur et d'une adresse.

auth.settings.extra_fieldsest un dictionnaire de champs supplémentaires. La clé est le nom de la table d'authentification à laquelle ajouter les champs supplémentaires. La valeur est une liste de champs supplémentaires. Ici, nous avons ajouté deux champs supplémentaires,phone_number and address.

usernamedoit être traité d'une manière spéciale, car il est impliqué dans le processus d'authentification, qui est normalement basé sur le champ de courrier électronique. En passant l'argument nom d'utilisateur à la ligne suivante, il est informé à web2py que nous voulons le champ nom d'utilisateur, et nous voulons l'utiliser pour la connexion au lieu du champ email. Il agit comme une clé primaire.

auth.define_tables(username = True)

Le nom d'utilisateur est traité comme une valeur unique. Il peut y avoir des cas où l'enregistrement se produit en dehors du formulaire d'inscription normal. Il arrive également que le nouvel utilisateur soit obligé de se connecter pour terminer son enregistrement.

Cela peut être fait en utilisant un champ factice, complete_registration qui est réglé sur False par défaut, et est défini sur True lorsqu'ils mettent à jour leur profil.

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)

Ce scénario peut demander aux nouveaux utilisateurs, lors de la connexion, de terminer leur enregistrement.

Dans db.py, dans le dossier models, nous pouvons ajouter le code suivant -

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

Cela obligera les nouveaux utilisateurs à modifier leur profil conformément aux exigences.

Autorisation

C'est le processus consistant à accorder un accès ou à donner la permission de quelque chose aux utilisateurs.

Dans web2py, une fois que le nouvel utilisateur est créé ou enregistré, un nouveau groupe est créé pour contenir l'utilisateur. Le rôle du nouvel utilisateur est conventionnellement appelé“user_[id]” où id est l'identification unique de l'utilisateur.

La valeur par défaut pour la création du nouveau groupe est -

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

La création des groupes parmi les utilisateurs peut être désactivée par -

auth.settings.create_user_groups = None

La création, l'octroi de l'accès à des membres particuliers et des autorisations peuvent être réalisés par programme avec l'aide d'appadmin également.

Certaines des implémentations sont répertoriées comme suit -

Sr.Non Commande et utilisation
1

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

renvoie l'id du groupe nouvellement créé.

2

auth.del_group(group_id)

Supprime le groupe avec l'ID spécifié

3

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

Supprime le groupe d'utilisateurs avec l'identification donnée.

4

auth.user_group(user_id)

Renvoie la valeur de l'id du groupe associé de manière unique pour l'utilisateur donné.

5

auth.add_membership(group_id, user_id)

Renvoie la valeur de user_id pour le group_id donné

6

auth.del_membership(group_id, user_id)

Révoque l'accès du membre_id donné, c'est-à-dire user_id du groupe donné.

sept

auth.has_membership(group_id, user_id, role)

Vérifie si user_id appartient au groupe donné.

Service central d'authentification (CAS)

web2py fournit une norme de l'industrie, à savoir, le service d'authentification client - CAS pour web2py intégré au client et au serveur. C'est un outil d'authentification tiers.

C'est un protocole ouvert pour l'authentification distribuée. Le fonctionnement du CAS est le suivant -

  • Si l'utilisateur visite le site Web, le protocole vérifie si l'utilisateur est authentifié.

  • Si l'utilisateur n'est pas authentifié auprès de l'application, le protocole redirige vers la page où l'utilisateur peut s'inscrire ou se connecter à l'application.

  • Si l'enregistrement est terminé, l'utilisateur reçoit un e-mail. L'enregistrement n'est pas terminé tant que l'utilisateur n'a pas vérifié l'e-mail.

  • Une fois l'enregistrement réussi, l'utilisateur est authentifié avec la clé, qui est utilisée par l'appliance CAS.

  • La clé est utilisée pour obtenir les informations d'identification de l'utilisateur via une requête HTTP, qui est définie en arrière-plan.