2009-09-08 8 views
0

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:

    1. Site
  • 1.1 Pages
  • 1.2 Les utilisateurs
  • 1.3 Groupes
  • 1.4 Administrateur

et table aros:

    1. 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?

Répondre

1

Pensée 1 -> Quelque part dans la page d'affichage, avez-vous une demandeAction à une autre page par hasard? Il peut provenir d'une page de vue ou d'un élément sur une page de vue.

Pensée 2 -> Créez votre mapActions complète. Ce n'est peut-être pas un problème, mais il est bon de commencer ici. N'ayez pas peur de tracer le code jusqu'au Composant d'Auth si besoin est. Juste pr() jusqu'à ce que vous trouviez où il redirige. Déterminez précisément ce qui cause le problème.

Assurez-vous que votre session est correcte et qu'elle n'est pas modifiée au cours du processus.

Pensée 3 -> Est-ce que vous "reconstruisez" les tables acl correctement? Ce peut être un problème de données. Je suggère que vous utilisiez les fonctions createAco(), createAro() et $ this-> Acl-> allow() pour vous assurer que les données sont correctes et que toutes les clés sont correctes. (jamais fait mal à vérifier) ​​

Ceci est l'un de ces problèmes où vous devez aller pas à pas et de suivre l'application. J'utilise le stable CakePHP actuel et je n'ai trouvé aucun problème.

+0

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