Zend_Auth выполнит большую часть аутентификации за вас. Используйте что-нибудь вместе
$auth = Zend_Auth::getInstance();
if (!$auth->hasIdentity()) {
//call a custom login action helper to try login with GET-params
}
if ($auth->hasIdentity())
$identity = $auth->getIdentity();
//...
}
Теперь вы можете определить Zend_Acl_Role на основе идентичности. Я всегда создаю новую роль для каждого пользователя и позволяю этой роли «наследовать» все общие роли, которые у пользователя есть на самом деле.
// specific user with $identity is given the generic roles staff and marketing
$acl->addRole(new Zend_Acl_Role('user'.$identity), array('staff', 'marketing'));
Конечно, вы можете получить массив ролей из базы данных. Затем вы должны указать права каждой роли. Вы можете жестко запрограммировать это или сохранить эту информацию в базе данных.
$acl->allow('marketing',
array('newsletter', 'latest'),
array('publish', 'archive'));
В вашем контроллере теперь вы можете проверить
$acl->isAllowed('user'.$identity, Zend_Acl_Resource ...)
Если у вас более сложный контроль доступа, где права зависят от информации внутри некоторых классов (возможно, моделей MCV), пусть эти классы реализуют Zend_Acl_Resource_Interface. Затем вы используете этот класс как параметр Zend_Acl_Assertion и обрабатываете там информацию.
person
ACNB
schedule
23.01.2012