CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 04-07-2008 10:58:29

avairet
Chef Pâtissier
Date d'inscription: 25-06-2008
Messages: 1320

[AuthComponent] Double système ?

Bonjour à tous,

Je me demande s'il est possible de mixer un double système d'Auth :

- j'ai deux applis Cake qui vont se regrouper (merge ou applis distinctes, nous n'avons pas encore tranché)
- dans l'une, j'utilise Auth de manière très simple pour autoriser tout le front et demander authentification pour les pages d'admin.

Code: php

  1. // app_controller.php
  2.  
  3. public function beforeFilter() {
  4.   if(isset($this->Auth))
  5.     {
  6.       $this->Auth->userModel = 'Administrateur';
  7.       $this->Auth->fields = array('username' => 'login', 'password' => 'passe');
  8.       $this->Auth->loginAction = 'admins/login';
  9.       $this->Auth->loginRedirect = 'admin/admins';
  10.       $this->Auth->loginError = __('Identifiant ou mot de passe incorrect.', true);
  11.       $this->Auth->logoutRedirect = 'admin/admins';
  12.       $this->Auth->authError = __('Vous n\'avez pas accès à cette page. Veuillez vous identifier.', true);
  13.       $this->Auth->autoRedirect = true;
  14.       $this->Auth->authorize = 'controller';
  15.       if((empty($this->params['prefix']) || $this->params['prefix'] != 'admin') && $this->action != 'login')
  16.       {
  17.         $this->Auth->allow();
  18.       }
  19.     }
  20. }
  21.  
  22. public function isAuthorized()  {
  23.     return true;
  24. }

- dans l'autre appli c'est plus compliqué car il y a un système d'authentifcation qui d'abord récupère une autorisation via webservice, puis qui joue un peu l'ACL en fonction du profil du user. Pour faire cela, mon collègue a modifié le component Auth pour ajouter une nouvelle option à $this->Auth->authorize().
- dans ce second système, voici ce qui est mis dans app_controller :

Code: php

  1. public function beforeFilter() {
  2.  if(isset($this->Auth)) {
  3.   $this->Auth->userModel = 'User';
  4.   $this->Auth->modelToCheck = array('Group' => 1 ,'Profil' => 2,'Level' => 3, 'GuestsActions' => 4 );
  5.   $this->Auth->fields = array('username' => 'pseudo', 'password' => 'password');  
  6.   $this->Auth->loginAction = '/users/login';
  7.   $this->Auth->loginRedirect = '/';
  8.   $this->Auth->loginError = __('Identifiant ou mot de passe incorrect.', true);
  9.   $this->Auth->logoutRedirect = '/';
  10.   $this->Auth->authError = __('Vous n\'avez pas accès à cette page. Veuillez vous identifier.', true);
  11.   $this->Auth->autoRedirect = false;
  12.   $this->Auth->authorize = 'vv_club'
  13.  }
  14. }
  15.  
  16. public function isAuthorized()  {
  17.    // return true;
  18. }

Donc ma question : peut-on imaginer un système qui switche entre les deux versions, en fonction par exemple de l'URL ??

Merci par avance à tous les bakers pour leurs idées sur ce sujet !

Avairet

Hors ligne

 

#2 04-07-2008 14:00:27

francky06l
Cooker
Date d'inscription: 25-06-2008
Messages: 479

Re: [AuthComponent] Double système ?

Salut Avairet,

Nous avons deja evoque ce sujet je crois, mais avec moins de details.
En gros tu veux qu'un user se logue une fois pour les deux systemes.
La grosse question est :
-est ce que la table User est partagee par les deux applications ? Si oui c'est plus simple ..

Maintenant je pense que les deux methode peuvent cohabiter, si les applications ont par exemple des subdomain differents, tu peux filtrer avec le hostname.


if(preg_match('/^subdomain1\.(.+)/', $_SERVER[SERVER_NAME']))
   functionAppli1();
else
  functionAppli2();


De toute facon tu peux eventuellement avoir la meme session pour les 2 applications, mais cela implique des mettre les 2 applis sur le meme host si tu n'utilise pas le stockage des sessions en database.

Hors ligne

 

#3 04-07-2008 14:28:39

avairet
Chef Pâtissier
Date d'inscription: 25-06-2008
Messages: 1320

Re: [AuthComponent] Double système ?

Salut Franky,

Oui on a déjà parlé de choses à ce sujet.

En fait pour le moment et même si cela peut changer, les deux systèmes d'authentification ne travaillent pas avec la même table et les "types" d'utilisateurs ne sont pas du tout les mêmes.

Dans le cas "simple", appelons-le "Edito", je fais du AuthComponent pour les pages admin_ exclusivement. Et à l'intérieur des pages d'admin, j'ai un système simplifié d'ACL (fait maison sans les outils de Cake) pour attribuer des autorisations à certaines sections en fonction du niveau de l'admin loggé. J'ai donc basé l'Auth sur une table "administrateurs", avec un contrôleur et un modèle idoines.

Dans le cas "complexe", appelons-le "Club", mon collègue fait du Auth et ACL sur une table "users", mais ce n'est pas cette table qui détermine les droits de chacun ! Il y a tout d'abord une connexion par webservice à un presta externe, qui va nous renvoyer les infos suivantes : abonné oui ou non, type d'abonnement, éventuellement cas particulier lié au type d'abonnement. Ce que nous allons stocker chez nous, c'est un simple flag nous disant à quel groupe ou sous-groupe l'utilisateur appartient.

Comme nous devons merger les 2 applis, je me dis que les deux systèmes d'Auth vont entrer en conflit !

Avec les collègues, on pensait donc switcher entre les deux méthodes, en fonction par exemple de l'URL : url "edito" => pas d'authentification, sauf si je vais dans les pages d'admin ; url "Club" => authentification pour toutes les fonctions interactives. Et on choisirait alors le paramètre pour "$this->Auth->authorize()".

Là où ça se complique, c'est que depuis la partie "Edito", on a des fonctions qui nécessitent d'être loggé/indentifié comme abonné "Club" et bien sûr, dans la partie "Club" il y a du back-office et donc des Administrateurs qui doivent se connecter selon le process de l'appli "Edito" !

Donc d'après toi :
1) Est-ce possible de switcher sur le système d'Auth et de droits dans Bootstrap ou dans AppController en fonction de l'url ?
2) Si oui, le switch devra-t-il se faire uniquement dans beforeFilter() ou aussi sur isAuthorized() ?

Merci de ton implication dans ma galère !

Hors ligne

 

#4 04-07-2008 14:50:55

francky06l
Cooker
Date d'inscription: 25-06-2008
Messages: 479

Re: [AuthComponent] Double système ?

Donc 2 tables User, et aussi les tables ACL ?
Est qu'un user est forcement declare dans les deux systemes.

En gros le plus simple serait de loguer le user sur la deuxieme application quand il se logue sur la premiere et vice versa. Pareil au logout.
Le tout en partageant la meme session, ainsi les echanges de donnees entre les 2 applications peuvent se faire via la Session.
Evidemment il faut aussi synchroniser les users (creation etc ...) ou alors le faire sur les deux systeme. Il est a peu pres certain que les users n'auront pas le meme id (ca risque de poser probleme a Auth, si l'id change dans la session).

Maintenant pour faire une seule appli avec les deux, ca risque d'etre volumineux :

1) Oui tu peux detecter ca dans bootstrap a l'aide d'un subdomain name, dans appController aussi.
2) Si tu fais des choses differentes dans isAuthorized, evidemment tu dois aussi en tenir compte.

Le plus clean serait quand meme de mettre les User et les droits etc .. dans un plugin que tu mettrais dans tes 2 applis (une DB a part pour le plugin). Ca oblige d'ecrire un plugin qui gere les cas des 2 applis, peut etre que c'est lourd?

Dernière modification par francky06l (04-07-2008 14:57:25)

Hors ligne

 

#5 04-07-2008 15:07:05

avairet
Chef Pâtissier
Date d'inscription: 25-06-2008
Messages: 1320

Re: [AuthComponent] Double système ?

Non pas deux tables Users ! Une table Users et une table Administrateurs + des tables d'Acl mais un peu custom (sur ce dernier point je dois revoir l'architecture avec le collègue qui me semble être parit un peu trop loin).

Non un "user" n'est pas déclaré dans les deux systèmes, mais uniquement chez le presta externe !

Oui il faut "répertcuter" le log d'une appli à l'autre et partager les infos via la session (qui selon moi doit se faire en base pour celà).

Plugin : oui pourquoi pas, mais je n'ai encore rien fait en Cake sur ce sujet... Mais ton idée suggérée par mail : une appli d'identification avec deux plugin "Edito" et "Club" me semblait plus intéressante.

Bref, merci pour ta contribution, mais notre problématique nécessiterait que tu sois là au bureau pour que nous puissions vraiment décider en connaissance de causes ! roll

Hors ligne

 

#6 04-07-2008 21:34:04

francky06l
Cooker
Date d'inscription: 25-06-2008
Messages: 479

Re: [AuthComponent] Double système ?

Il est loin le bureau ?? Je suis a cote de Nice :-) wink

Hors ligne

 

Pied de page des forums

Propuls� par FluxBB
Traduction par FluxBB.fr