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
- Migration : Comment passer de Temma 1.x à la version 2
- Installation : Télécharger Temma et l'installer pour démarrer votre projet Web
- Configuration : Toutes les directives de configuration du fichier etc/temma.json et les variables d'environnement utilisables en option
- Bibliothèques externes : Comment utiliser des bibliothèques de fonctions externes
- Routage : Le système de routage par défaut de Temma, et le routage avancé
- Log : Utilisation du système de log, gestion par niveaux de criticité
- Contrôleurs : Pièces essentiels de votre application Web
- Vues : Templates Smarty ou exports JSON/CSV/RSS/iCal/INI
- Injection de dépendances : La colonne vertébrale de vos développements applicatifs
- Sessions : Extension des sessions utilisateurs gérées par PHP
- Sources de données : Pour gérer l'accès aux données de manière unifiée
- Modèle : Comment utiliser les DAO pour accéder aux bases de données
- Flux d'exécution : Comment gérer le flux d'exécution, entre les plugins et le contrôleur
- Plugins : Comment utiliser les plugins, et écrire les vôtres pour modulariser votre code
- Attributs : Comment filtrer l'accès aux contrôleurs et aux actions
- Tests : Pour écrire des tests d'intégration automatisés.
- Interface en ligne de commande : Pour créer des scripts exécutables en ligne de commande, initialisés automatiquement par Temma
-
Helpers :
Objets proposés par Temma pour vous aider dans plusieurs circonstances
- Scripts en ligne de commande
-
Contrôleur + plugin
- Auth : Contrôleur et plugin servant à gérer l'authentification des utilisateurs
- Plugins
- Attributs
-
Plugins Smarty
- urlize : Modificateur transformant un texte en URL
- filenamize : Modificateur transformant un texte en nom de fichier
- nbsp : Modificateur transformant des espaces en espaces non sécables
-
Objets utilitaires
- ANSI : Pour mettre en forme les textes écrits sur la sortie standard
- BaseConvert : Pour faire des conversions de bases numériques
- DataFilter : Pour filtrer et valider des données
- Email : Pour envoyer des emails
- HTMLCleaner : Pour nettoyer un flux HTML provenant d'un éditeur WYSIWYG
- IniExport : Pour exporter des données au format INI
- Json : Pour lire des flux JSON pouvant contenir des commentaires
- Lock : Pour verrouiller l'accès à un fichier, ou l'exécution du script PHP courant
- Registry : Pour stocker proprement des variables globales
- Smarty : Pour traiter des templates Smarty en dehors de la vue
- Term : Gestion des terminaux (TTY)
- Text : Différents traitements sur les chaînes de caractères
- Timer : Pour gérer des chronomètres