Documentation

Attribut Auth

Table des matières 

Présentation

L'attribut Auth sert à gérer comment un contrôleur ou une action peut être accédé, en fonction de l'authentification des utilisateurs, des rôles qui leur sont assignés et des services pour lesquels ils ont des droits d'accès.

Variable de template $currentUser

Cet attribut se base sur l'existence d'une variable de template $currentUser qui contient des informations sur l'utilisateur à partir du moment où il s'est authentifié. Cette variable est habituellement positionnée par un pré-plugin.

La variable $currentUser doit être un tableau associatif contenant les clés suivantes :

  • id : (int) Identifiant de l'utilisateur. Doit être défini lorsque l'utilisateur est authentifié.
  • roles : (array) Tableau associatif dont les clés sont les rôles de l'utilisateur (associées à la valeur true).
  • services : (array) Tableau associatif dont les clés sont les services auxquels l'utilisateur a accès (associées à la valeur true).

Paramètres

L'attribut propose plusieurs paramètres :

  • $role : (string|array) Rôle que l'utilisateur doit posséder, ou liste de rôles dont l'utilisateur doit posséder au moins un.
  • $service : (string|array) Service auquel l'utilisateur doit avoir accès, ou liste de services dont l'utilisateur doit avoir accès à au moins un.
  • $authenticated : (null|bool) L'effet de ce paramètre dépend de sa valeur :
    • true : (valeur par défaut) L'utilisateur doit être authentifié pour accéder au contrôleur ou à l'action.
    • false : L'utilisateur ne doit pas être authentifié.
    • null : L'utilisateur peut être authentifié ou non.
  • $redirect : (string) URL vers laquelle rediriger l'utilisateur s'il n'a pas le droit d'accéder au contrôleur ou à l'action.
  • $redirectVar : (string) Nom de la variable de template contenant l'URL vers laquelle rediriger l'utilisateur.
  • $storeUrl : (bool) Mettre à true pour que l'URL demandée soit enregistrée dans la variable de session authRequestedUrl, lorsque l'utilisateur est redirigé car il n'est pas autorisé. Cela permet, après authentification, de ramener l'utilisateur vers la page à laquelle il souhaitait accéder.

Priorité de redirection

Si l'accès est refusé, l'utilisateur peut être redirigé. Pour déterminer l'URL de redirection, l'attribut applique l'ordre de priorité suivant :

  • Si le paramètre $redirect est défini, il est utilisé.
  • Si le paramètre $redirectVar est défini, et qu'il contient le nom d'une variable de template qui existe et est non vide, le contenu de celle-ci est utilisé.
  • Si le fichier temma.json contient une configuration étendue x-security, et que celle-ci contient une clé authRedirect, le contenu de celle-ci est utilisé.
  • Si le fichier temma.json contient une configuration étendue x-security, et que celle-ci contient une clé redirect, le contenu de celle-ci est utilisé.

Si aucune URL de redirection n'a été trouvée, une erreur 401 est retournée.

Configuration

Pour que tous les attributs Auth redirigent vers la même URL, il suffit de définir la clé authRedirect dans la configuration étendue x-security du fichier temma.json :

{
    "x-security": {
        "authRedirect": "/login"
    }
}

Pour que l'URL de redirection soit la même pour les attributs Auth, Method, Referer et Redirect, il suffit de définir la clé redirect dans la configuration étendue x-security du fichier temma.json :

{
    "x-security": {
        "redirect": "/login"
    }
}

Exemples d'utilisation

use \Temma\Attributes\Auth as TµAuth;

/*
 * Les actions de ce contrôleur ne sont accessibles
 * qu'aux utilisateurs authentifiés.
 */
#[TµAuth]
class Account extends \Temma\Web\Controller {
    // ...
}
use \Temma\Attributes\Auth as TµAuth;

/*
 * Les actions ne sont accessible qu'aux utilisateurs
 * non authentifiés, avec une redirection vers la page
 * d'accueil.
 */
#[TµAuth(authenticated: false, redirect: '/')]
class Login extends \Temma\Web\Controller {
    // ...
}
use \Temma\Attributes\Auth as TµAuth;

class Login extends \Temma\Web\Controller {
    // autorisé pour les utilisateurs avec le role "manager"
    #[TµAuth('manager')]
    public function action1() { }

    // identique au précédent
    #[TµAuth(role: 'manager')]
    public function action1bis() { }

    // autorisé pour les utilisateurs avec le role "manager" ou "writer"
    #[TµAuth(['manager', 'writer'])]
    public function action2() { }

    // identique au précédent
    #[TµAuth(role: ['manager', 'writer'])]
    public function action2bis() { }

    // autorisé pour les utilisateurs ayant accès au service "images"
    #[TµAuth(service: 'images')]
    public function action3() { }

    // autorisé pour les utilisateurs ayant accès au service "images" ou "text"
    #[TµAuth(service: ['images', 'text'])]
    public function action4() { }

    // autorisé pour les utilisateurs qui ont en même temps les rôles
    // "manager" et "writer"
    #[TµAuth('manager')]
    #[TµAuth('writer')]
    public function action5() { }

    // redirige les utilisateurs qui ne sont pas des administrateurs
    #[TµAuth('admin', redirect: '/login')]
    public function action6() { }
}
Précédent : Helper plugin de localisation multilingue
Suivant : Helper attribut Method

Table des matières