2009-09-11 3 views
1

Теперь я работаю над интеграцией аутентификации и авторизации в своем приложении CakePHP, и у меня возникают некоторые трудности.Проверка подлинности CakePHP и модель пользователя

Прежде всего, я не использую ACL. Меня это пугает.

В моей AppController у меня есть это:

var $components = array("Auth"); 

Таким образом, в любое время я хочу, чтобы проверить, вошедшего в систему пользователя, я называю это один из моих контроллеров:

$this->Auth->user(); 

И I получите массив, который является информацией из моей таблицы usrs (моя таблица называется usrs с моделью Usr).

Проблема в том, что я часто хочу вызывать функции на Usr модели, так что я должен сделать это в мой контроллер:

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

Это, кажется, не очень cakey, и это было мне пристанет так как я знаю, что должен быть лучший способ. Должен ли я добавить var $uses = array("Usr") в свой AppController, поэтому мне не нужно постоянно использовать ClassRegistry? Каков наилучший способ сделать это?

+0

Где Вы знаете, вы могли бы назвать модель пользователя и установить $ useTable = «usrs», или позвоните по модели USR и установить $ useTable = ' usr 'или' users ', или вам просто не нравится буква' e '? :) – deizel

+0

спасибо за советский дизл. У меня есть какой-то kyboard issus, над которым я работаю. ;) В любом случае, я прочитал в блоге, что «Пользователь» - это зарезервированное слово в Oracle (которое я использую сейчас впервые) - соединитель Oracle не является самым проверенным фрагментом кода, который я видел, поэтому я подумал, что лучше просто избежать проблемы вообще. – nickf

ответ

0

Я только что открыл один из способов сделать это в одной строке:

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

Я до сих пор не знаю, если это лучшая практика, хотя ...

+0

'Controller :: loadModel' - лучшая практика для контроллеров, если вам нужна только модель для этого действия контроллера, а не все действия в контроллере. Outwith контроллеров вам нужно будет прибегнуть к «ClassRegistry :: init» и «App :: import», и при их использовании вы должны спросить себя, следуете ли вы за MVC. В этом сообщении суммируется позиция Гво о таких подходах: http://techno-geeks.org/2009/05/models-inside-controller/ – deizel

1

Почему вы не просто use модель?

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

Это делает модель доступной как обычно:

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

будет работать, если я положу его в AppController? Он не будет перезаписывать значение по умолчанию? (например: PostsController по умолчанию имеет '$ uses = array (" Post ");') – nickf

+1

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

+1

$ uses загрузит модель Usr для всех действий, при этом метод loadModel будет загружать его только при необходимости. Таким образом, это действительно актуально между большим количеством объектов в памяти или большим количеством кода в действиях контроллера. – deizel

Смежные вопросы