12 August, 2009

Мой опыт в создании модульного приложения на Zend Framework: Часть 3

Дошло дело и до аутентификации.

Сначала - ACL (access control level). Создал файл Spod_Acl (в своем "подразделении" библиотеки), в нем прописал роли и ресурсы, а тж. allow и deny. Здесь всё.

Затем - Auth. Свой, по аналогии, Spod_Auth, как мы писали ранее и я не совсем понимал, я не писал. Точнее, не писал по тому принципу, по которому он сделан в одной из статей на девзоне. Я создал класс Spod_Authenticator, в котором, с позволения сказать, перегрузил метод класса Zend_Auth_Adapter_DbTable authenticate() - просто для того, чтобы было проще. Т. к. в "свой" authenticate() я поместил вызов и обработку "того", родного зендовского метода аутентификации:

public function authenticate($login, $password)
{
$authAdapter = new Zend_Auth_Adapter_DbTable($this->_dbAdapter, $this->_dbTable, $this->_identityColumn, $this->_credentialColumn, 'MD5(?)');
$authAdapter->setIdentity($login);
$authAdapter->setCredential($password);
return $this->_auth->authenticate($authAdapter);
}


Как видим, параметры - логин и пароль (мы ж аутентификацию пишем). А методы класса проиничены в конструкторе. В итоге вызывать надо так:

$sAuth = new Spod_Authenticator('users', 'us_login', 'us_pass');
$result = $sAuth->authenticate($login, $password);


Долго думал и страдал над ошибкой "No adapter found..." - точно не вспомню формулировку, но суть в том, что для Zend_Auth_Adapter_DbTable нужен наш адаптер к базюке. Конфиг адаптера - в апп.ини. Казалось бы, взять и вытащить по аналогии с другими ресурсами бутстрапа, типа $view = $this->getResource('view');. Я так и пытался. NULL, и хоть ты тресни... В итоге выцепил из старых проектов фактори конфига, получение из него db (натурально, этот самый адаптер пихаю в реестр и в конструкторе своего аутентификатора получаю). Так и сделал. Занялся следующей частью проекта... как тут случайно и внезапно наскочил в доке на то, что db и его адаптер надо получать так:

$resource = $bootstrap->getPluginResource('db');
$db = $resource->getDbAdapter();

No comments: