6.8. Authentification et gestion des utilisateurs
6.8.1 Login(), Logout() et Role()
Pour l'authentification des utilisateurs, Karrigell fournit un canevas qui utilise 3 fonctions intégrées,Login()
, Logout()
et Role()
. L'implémentation par défaut s'appuie sur une base
de données d'utilisateurs gérée par le script
users.ks
, qui est réservé à l'administrateur de l'hôte.
Ce script est accessible depuis la page d'accueil :
Administration/Gestion des utilisateurs
Les utilsateurs peuvent avoir différents rôles, renvoyés par la function
Role()
:
None
si l'utilisateur n'est pas identifiévisit
s'il est identifié sur un profil "visitor"edit
profil "editor"admin
profil d'administrateur du site
L'administrateur du site peut ajouter d'autres rôles en créant un fichier appelé roles.txt et en le mettant dans le répertoire de données ( data/www pour l'hôte local). Ce fichier contient une ligne par nom de rôle
Pour restreindre l'accès à un script aux utilisateurs qui ont un rôle donné, on utilise la function
Login([script,[role,[valid_in,[redir_to,[add_user]]]]])
Quand elle est exécutée, elle vérifie si l'utilisateur est authentifié (en se servant d'un cookie) ; si ce n'est pas le cas :
- une redirection est effectuée vers un script (par défaut
/login.ks/login
) qui invite l'utilisateur à entrer un identifiant et un mot de passe - le script vérifie si ces identifiant et mot de passe sont présents dans
la base de données des utilisateurs et si l'utilisateur correspondant possède
les droits spécifiés dans l'argument
role
(qui vaut["admin"]
par défaut) - si oui, une redirection est effectuée vers le script de départ,
ou vers une autre url qui peut être spécifiée par l'argument
redir_to
:Login(role=["admin"],redir_to="/envoie/moi/ici/apres/connection")
- par défaut, l'authentification est valable dans le dossier dans lequel le
script est situé. On peut modifier le périmètre de validités par l'argument
valid_in
. Par exemple,Login(valid_in="/")
On peut spécifier un autre script que /login.ks/login
comme argument de la
fonction Login()
:
Login(script="/utils/ident_perso.py")
par exemple
Si un utilisateur se connecte avec un identifiant qui n'est pas encore dans
la base de données utilisateurs, par défaut il recevra un message d'erreur. En donnant
au paramètre add_user
la valeur d'un des rôles possibles ("admin", "edit", "vidit"
), un bouton de création d'un nouveau compte est proposé et l'utilisateur pourra entrer ses données personnelles. Dans tous les cas, si l'identifiant existe déjà et que le mot
de passe n'est pas correct, un message d'erreur sera aussi renvoyé
Logout([script,[valid_in,[redir_to]]])
efface
les informations de connection. Le script de déconnections est par défaut
/admin/login.ks/logout
; valid_in
et
redir_to
ont la même signification que pour
Login()
6.8.2 Exemple
def index(): # vérifie que l'utilisateur est éditeur ou administrateur Login(role=["edit","admin"]) # ne s'affiche que si Login() a marché print "Connecté comme ",Role()
Si l'utilisateur n'est pas connecté comme administrateur ou éditeur, Login()
redirige vers la page qui demande l'identifiant et le mot de passe
S'il est connecté comme "edit" ou "admin", Login()
ne fait rien et le reste de la fonction index()
est exécuté : la fonction Role()
renvoie le rôle courant de l'utilisateur