Zend_Acl, Zend_Auth и модули - PullRequest
       28

Zend_Acl, Zend_Auth и модули

0 голосов
/ 07 ноября 2011

Я пытаюсь обойти Zend_Acl, но пока безуспешно.Мне нужна помощь, потому что я действительно застрял.Моя ситуация такова:

У меня есть два модуля

  • члены
  • администраторы

и две роли

  • member
  • admin

Я установил Zend_Auth с именем входа, которое получает модуль членов и роль участника, и роль администратора.Оба могут делать кое-что здесь, но роль администратора также может иметь доступ к модулю «администраторы», где можно делать больше вещей администратора.

Я настроил Acl следующим образом:

$acl = new Zend_Acl();

$acl->addRole(new Zend_Acl_Role('member'));
$acl->addRole(new Zend_Acl_Role('admin'), 'member');

$acl->add(new Zend_Acl_Resource('members'));
$acl->add(new Zend_Acl_Resource('administrators'), 'members');

$acl->allow('member', 'members'); 
$acl->allow('admin',  'administrators');


$registry = Zend_Registry::getInstance();
$registry->set('acl', $acl);

Я сохранил этот файл и вызываю его на странице index.php.

Предполагая, что то, что я сделал до сих пор, правильно, моя проблема в том, что делать дальше?Это первый раз, когда я имею дело с Acl, и, честно говоря, я немного озадачен тем, что все работает.Не могли бы вы помочь?Заранее большое спасибо.

1 Ответ

3 голосов
/ 07 ноября 2011

Вы создали объект ACL.Вы должны использовать его сейчас, каждый раз, когда вам нужно проверить, есть ли у текущего пользователя доступ к одному из ресурсов.

Для этого вам нужно извлечь объект ACL из реестра:

$acl = Zend_Registry::get('acl');

А затем запросите его:

if ($acl->isAllowed($yourUser, 'members')) {
  // Do the job
} else {
  // some message or redirection
}

Более подробную информацию можно найти в документации Zend_Acl .

Надеюсь, что это поможет,

...