J'essaye d'implémenter une combinaison d'authentification/autorisation dans mon site cakePHP en utilisant Auth et Acl Components, mais quelque chose d'étrange se produit avec mon implémentation. J'ai les bonnes tables acos, aros et aros_acos, et elles semblent fonctionner à un certain niveau.cakephp acl aros_acos paradox
J'ai tracé mes actions comme ceci:
$ this-> Auth> mapActions (array ('read' => array ('view'), 'update' => array ('edit')));
Ma table ACOS ressemble à ceci:
-
- Site
- 1.1 Pages
- 1.2 Les utilisateurs
- 1.3 Groupes
- 1.4 Administrateur
et table aros:
-
- utilisateurs
- 1.1 éditeurs
- 1.1.1 admins
- 1.1.1.1 ADMIN_NAME
- 1.2 regular_user
Les utilisateurs, les éditeurs et les administrateurs sont des groupes. Admin_name est un utilisateur admin, membre du groupe admins et regular_user est membre du groupe users. Maintenant, dans la table aros_acos, si je donne au groupe 'users' les droits CRUD pour une 'page' comme ceci: 0 1 1 0 (ce qui leur donne le droit de lire et de mettre à jour) alors tout fonctionne bien (à moins pour les actions 'view' et 'edit'). Mais si je mets 0 1 0 0 (seulement le droit de lire) alors je suis redirigé vers '/', et une chose particulière que j'ai remarquée est qu'elle n'appelle pas app_controller ou au moins la fonction beforeFilter() dans l'app_controller.
De plus, j'ai écrit le beforeFilter() de sorte que quand un utilisateur n'a pas accès à un crud, de lui donner un message $ this-> flash, le laissant savoir qu'il est "non autorisé" (I devait le faire, car $ this-> Auth-> authError ne semble pas fonctionner). Donc, dans cet esprit, je réécris maintenant la table aros_acos pour le groupe d'utilisateurs comme ceci: 0 0 1 0 (permission seulement de mettre à jour) et cette fois je reçois le message flash quand j'accède à l'action 'view' (ce qui est correct puisque je n'ai pas la permission d'y accéder), mais je reçois aussi le message flash lorsque j'essaie d'accéder à l'action 'edit'.
Il me manque quelque chose, et je ne sais pas quoi. J'ai écrit cette question, espérant qu'avant de la finir, je trouverais moi-même la solution ... mais pas de chance. Je ne sais toujours pas ce qui se passe, je suppose que c'est quelque chose de contrôleur ... Avez-vous des idées?
Merci pour la réponse. Ces derniers jours, j'ai essayé de tracer mon problème, mais je n'ai pas réussi à le trouver. Donc, après tout, je l'ai juste corrigé avec une ligne de routage. Donc maintenant je suis en train de router le '/' vers la page de connexion. Cela semble fonctionner. Je ne sais pas si c'est OK ma solution, en fait je suis sûr que ce n'est pas le cas, mais de toute façon j'ai une date butoir à atteindre et cette solution fonctionne à tous les niveaux (ce que j'ai testé). Maintenant, si un utilisateur tente d'accéder à un crud non autorisé, alors il est envoyé à la page de connexion et sur cette page, il reçoit la notification $ this-> Auth-> authError. Quoi qu'il en soit, merci pour le soutien. – Progenitura