Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
tips_informatiques:programmation:php:plugin_alaxos:components:alaxosaccessmanagercomponent [2010/08/24 21:46] nico créée |
tips_informatiques:programmation:php:plugin_alaxos:components:alaxosaccessmanagercomponent [2010/08/24 00:00] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== AlaxosAccessManagerComponent ====== | ====== AlaxosAccessManagerComponent ====== | ||
+ | |||
+ | |||
+ | |||
+ | ===== Une alternative à l'utilisation de Auth + ACL ===== | ||
+ | |||
+ | |||
+ | |||
+ | Ce composant a été écrit alors que l'implémentation des ACL de CakePHP ne supportait pas le stockage des droits d'accès | ||
+ | en base de données, ce qui à mes yeux rendait l'utilisation des ACL impossible. Il pourrait être considéré aujourd'hui comme déprécié, mais peut néanmoins encore être utilisé. | ||
+ | |||
+ | Ce composant permet de **gérer les droits d'accès de chaque rôle sur chaque action, ou sur toutes les actions ayant un même préfixe**. | ||
+ | Par exemple, un utilisateur ayant le rôle administrateur pourrait accéder à toutes les actions dont le préfixe est admin (admin_index, admin_view, admin_edit, ...). | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Authentification ===== | ||
+ | |||
+ | |||
+ | //Le composant ne gère pas l'authentification elle-même, mais seulement le fait d'authoriser ou non l'accès à une action//. | ||
+ | Pour fonctionner, | ||
+ | |||
+ | * l'utilisateur doit se trouver en session sous la constante //LOGGED_USER//. | ||
+ | * le ou les rôles de l'utilisateur doivent se trouver en session sous la constante LOGGED_USER_ROLES de l'utilisateur | ||
+ | |||
+ | <code php> | ||
+ | $logged_user = $this->Session->read(LOGGED_USER); | ||
+ | |||
+ | foreach ($logged_user[LOGGED_USER_ROLES] as $role) | ||
+ | { | ||
+ | (...) | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Utilisation ===== | ||
+ | |||
+ | |||
+ | La configuration de l'accès à une méthode protégée se fait au moyen des deux méthodes suivantes: | ||
+ | |||
+ | **add_action($action_name, $authorized_roles)** | ||
+ | |||
+ | >Permet de déterminer quels rôles ont accès à une action en particulier | ||
+ | |||
+ | >Exemple: | ||
+ | |||
+ | <code php> | ||
+ | /* | ||
+ | * Here the AccessManager is configured to grant access to the admin_edit actions to admin users | ||
+ | * | ||
+ | * (here 1 is the id of the administrator role) | ||
+ | */ | ||
+ | $this->AlaxosAccessManager->add_action('admin_edit', 1); | ||
+ | </code> | ||
+ | |||
+ | **add_prefix($action_name, $authorized_roles)** | ||
+ | |||
+ | >Permet de déterminer quels rôles ont accès à toutes les actions commençant par un préfixe | ||
+ | |||
+ | >Exemple: | ||
+ | |||
+ | <code php> | ||
+ | /* | ||
+ | * Here the AccessManager is configured to grant access to all admin_... actions to admin users | ||
+ | * | ||
+ | * (here 1 is the id of the administrator role) | ||
+ | */ | ||
+ | $this->AlaxosAccessManager->add_prefix('admin', 1); | ||
+ | </code> | ||
+ | |||
+ | |||
+ | **set_login_url($login_controller = 'users', $login_action = 'login')** | ||
+ | |||
+ | >Permet d'indiquer au composant sur quelle url rediriger un utilisateur n'ayant pas accès à la page demandée | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Remarque ===== | ||
+ | |||
+ | |||
+ | Ce composant n'est plus maintenu, car depuis que les ACL peuvent être stockées en base de données, | ||
+ | je préfère les utiliser pour leur souplesse. | ||
+ | |||
+ | Cette approche permettait néanmoins de mettre en place rapidement des droits d'accès, en particulier dans le | ||
+ | cas où un utilisateur pouvait avoir plusieurs rôles: | ||
+ | |||
+ | users <---> users_roles <---> roles | ||