2009-09-11 10 views
1

Je travaille actuellement sur l'intégration de l'authentification et de l'autorisation dans mon application CakePHP et j'ai quelques difficultés.Authentification CakePHP et le modèle Utilisateur

Tout d'abord, je n'utilise pas ACL. Ça me fait peur.

Dans mon AppController j'ai ceci:

var $components = array("Auth"); 

Donc, chaque fois que je veux vérifier l'utilisateur connecté, j'appelle l'un de mes contrôleurs:

$this->Auth->user(); 

Et je obtenir un tableau qui est l'information de ma table usrs (ma table est appelée usrs avec le modèle Usr).

Le problème est que je veux souvent appeler des fonctions sur le modèle Usr, donc je dois le faire dans mon contrôleur:

$usr = ClassRegistry::init('Usr'); 
$usrInfo = $this->Auth->user(); 
$usr->set($usrInfo); 
// -- or -- 
$usr = ClassRegistry::init('Usr'); 
$usrId = $this->Auth->user('id'); 
$usr->id = $usrId; 

Cela ne semble pas très cakey et il a été me casser les pieds puisque je sais qu'il doit y avoir un meilleur moyen. Devrais-je ajouter var $uses = array("Usr") dans mon AppController pour ne pas avoir à utiliser ClassRegistry tout le temps? Quelle est la meilleure façon de faire cela?

+0

Où savez-vous que vous pouvez appeler le modèle utilisateur et définir $ useTable = « usrs », ou appelez le modèle Usr et définir $ useTable = ' usr 'ou' utilisateurs ', ou n'aimez-vous pas la lettre' e '? :) – deizel

+0

merci pour le conseil de TripAdvisor. J'ai quelques trucs de kyboard dans lesquels je travaille. ;) En tout cas, j'ai lu dans un blog que "User" est un mot réservé dans Oracle (que j'utilise maintenant pour la première fois) - le connecteur Oracle n'est pas le morceau de code le mieux testé que j'ai vu, J'ai donc pensé qu'il valait mieux éviter tout simplement la question. – nickf

Répondre

0

Je viens de découvrir une façon de le faire en une ligne:

$this->loadModel('Usr', $this->Auth->user('id')) 

Je ne sais toujours pas si c'est la meilleure pratique si ...

+0

'Controller :: loadModel' est la meilleure pratique pour les contrôleurs si vous avez seulement besoin du modèle pour cette action du contrôleur et pas toutes les actions dans le contrôleur. En dehors des contrôleurs, vous devrez utiliser 'ClassRegistry :: init' et' App :: import', et en utilisant ceux-ci vous devriez vous demander si vous suivez toujours MVC. Ce post résume la position de Gwoo sur ces approches: http://techno-geeks.org/2009/05/models-inside-controller/ – deizel

1

Pourquoi trouvez-vous pas seulement use le modèle?

// in Controller 
var $uses = array('someModel', 'User'); 

Cela rend le modèle disponible comme d'habitude:

$this->User->someFunction($this->Auth->user('id')); // for example 
+0

cela fonctionnerait-il si je le mettais sur l'AppController? Cela ne remplacerait pas la valeur par défaut? (par exemple: PostsController par défaut a '$ uses = array (" Post ");') – nickf

+1

Oui. http://book.cakephp.org/view/829/The-App-Controller – deceze

+1

$ uses chargera le modèle Usr pour toutes les actions, l'approche loadModel ne le chargera que si nécessaire. Il s'agit donc d'un mélange entre plus d'objets en mémoire ou plus de code dans les actions du contrôleur. – deizel

Questions connexes