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="/")
    
    rend l'authentification valide pour tout le répertoire racine et ses descendants

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