ZF2 ACL проверяет ссылку в представлении

#zend-framework2 #zend-acl

#zend-framework2 #zend-acl

Вопрос:

Я настроил свои роли, ресурсы и разрешения в моем bootstrap, а в моем макете настроил меню навигации на основе этого, и это работает.

Что я пытаюсь сделать сейчас, так это создать панель администратора со ссылками редактирования / удаления, ЕСЛИ у текущего зарегистрированного пользователя есть эти разрешения. например, у меня может быть несколько ролей, которые могут просматривать список страниц cms, но только определенные роли могут редактировать страницу cms, и только определенные роли могут удалять страницу cms.

На данный момент я просто проверяю, вошел ли пользователь в систему:

 <?php if($user = $this->identity()): ?>
    <?php if($user['role'] == 'admin'):?>
        <a href="/delete-url">Delete</a>
    <?php endif;?>
<?php endif;?>
  

Как мне проверить разрешения текущей роли пользователя для указанного ресурса из представления на наличие произвольной ссылки (как указано выше)?

Ответ №1:

В макет встроен помощник просмотра ACL, поэтому, чтобы проверить, имеет ли роль доступ к ресурсу, мы можем вызвать $this->layout()->acl->isAllowed .

В этом фрагменте кода мы проверяем, авторизован ли пользователь ( $this->identity() возвращает false , если не авторизован, или массив сведений, если зарегистрирован), а затем, имеет ли пользователь разрешение «удалить» ресурс:

 <?php if($user = $this->identity()); //is logged in? ?>
    <?php if($this->layout()->acl->isAllowed($user['role'], $resource, 'delete')):?>
        <a href="/delete-url">Delete</a>
    <?php endif;?>
<?php endif;?>
  

isAllowed подпись является isAllowed($role = null, $resource = null, $privilege = null)