Взяв Zend_ACL в качестве моего примера, мне интересно, как это должно быть организовано для проекта.Конечно, пример хороший и аккуратный, но реальный сайт намного сложнее.
$acl = new Zend_Acl();
$acl->addRole(new Zend_Acl_Role('guest'));
$acl->addRole(new Zend_Acl_Role('member'));
$acl->addRole(new Zend_Acl_Role('admin'));
$parents = array('guest', 'member', 'admin');
$acl->addRole(new Zend_Acl_Role('someUser'), $parents);
$acl->add(new Zend_Acl_Resource('someResource'));
$acl->deny('guest', 'someResource');
$acl->allow('member', 'someResource');
echo ($acl->isAllowed('guest', 'someResource') ? 'allowed' : 'denied');
Учитывая, что каждый контроллер / страница на моем сайте будет иметь какую-то проверку доступа, мне нужны правила, чтобы они действовали глобальноимеется в наличии.Означает ли это, что мне нужно создать массивный конфигурационный файл или класс для настройки всех правил загрузки?Разве это не потратило бы много памяти?
И все же, если бы я только установил правила, необходимые для каждого контроллера, который бы нарушил назначение ACL?Основная причина использования ACL состоит в том, чтобы избежать распространения разрешений по всей базе кода следующим образом:
Admin_Controller
{
public function action()
{
if($user->role !== 'admin')
{
die('not allowed');
}
}
}
Как насчет изменений?Что делать, если правила ACL хранятся в базе данных, где администратор может легко изменить разрешения.Должны ли они быть загружены каждый запрос страницы?Разве это не обременительно для системы?
Короче говоря, как ACL работает на большом сайте?Какие проблемы возникают?Как обрабатываются каскадные разрешения?