Как использовать Zend 2 ACL Assertion с bjyAuthorize
Я пытаюсь создать права динамического присоединения к ролям на форуме. Моя проблема в том, что я не вижу никакой помощи в использовании Zend Framework 2 ACL, за исключением собственного API Zend.
В моем проекте пользователь может создавать новый подфорум на форуме и в других подфорумах.
например, форум -> some_subforum-> Кроме того_has_subForum. Каждый подфорум должен иметь свои права присоединения
Например, форум имеет два подфорума, и у нас есть две роли, администратор и пользователь, один подфорум видим для обеих ролей, а другой виден только пользователям с правами администратора.
И самое интересное здесь: когда администратор создает новый подфорум, он / она может предоставить определенные права каждой роли (администратор также может создавать новые роли, поэтому я не могу написать жесткий код, который либо), например чтение, чтение и запись, изменение или отсутствие права доступа к этому подфоруму. И это мой источник проблем. Я знаю, что могу использовать для этого утверждения AcL (?), Но я не понимаю, как его вызывать, когда я также использую BjyAuthorize, и он говорит мне определять утверждения с помощью диспетчера служб, но не подсказывает, как это сделать.
При использовании утверждений я представляю, что могу (каким-то образом) сказать этому классу утверждений, кому требуется присоединение к подфоруму, какие роли он / она выполняет, а затем утверждение сравнивает их с значениями db и возвращает true, если у пользователя есть эти права. В таблице БД я сохранил значения subdomain_id, role_id и forum_permission (например, read).
Итак, вкратце:
- Как определить утверждение в диспетчере сервисов при использовании Zend 2 и Bjyauthorize?
- Могу ли я сделать это, используя утверждения или что-то еще будет лучше?
1 ответ
Вам необходимо установить класс утверждения ("реализует Zend_Acl_Assert_Interface"), класс ресурсов ("реализует Zend_Acl_Resource_Interface") и класс роли ("реализует Zend_Acl_Role_Interface").
пример:
$acl->allow('user', 'resource', 'read', new Forum_Assertion());
Затем, когда вы вызываете isAllowed со своим пользователем и вашим ресурсом, ваш код подтверждения будет знать, кто пользователь, что такое ресурс (форум) и какие разрешения он запрашивает у пользователя.
пример:
if ($this->acl->isAllowed($this->theUser, $this->theForum, 'read'))...