2010-03-15 3 views
3

Я использую Zend_Navigation и пытаюсь интегрировать его с Zend_Acl. Каждая страница в навигации имеет атрибут privilege. Я не могу определить, как определить несколько привилегий для одной страницы.Предоставление страниц навигации Zend Несколько привилегий ACL

Использование: Страница, предназначенная для управления пользователями. Я хочу отобразить эту страницу (в навигации), если текущая подписанная роль пользователя имеет add, edit или delete привилегии на ресурсе Users.

Пример вход в навигационной XML:

<admin_users> 
    <label>Users</label> 
    <route>default</route> 
    <controller>admin</controller> 
    <action>users</action> 
    <resource>Users</resource> 
    <privilege>add,edit,delete</privilege> 
</admin_users> 

Использование запятой списка, как указано выше, не придает желаемое поведение.


ОБНОВЛЕНИЕ

После того, как рыть через код, я обнаружил, что Zend_Navigation_Page допускает только одно значение строки. Кто-нибудь расширил этот класс или нашел другой путь вокруг этого ограничения?

/** 
* Sets ACL privilege associated with this page 
* 
* @param string|null $privilege [optional] ACL privilege to associate 
*         with this page. Default is null, which 
*         sets no privilege. 
* @return Zend_Navigation_Page fluent interface, returns self 
*/ 
public function setPrivilege($privilege = null) 
{ 
    $this->_privilege = is_string($privilege) ? $privilege : null; 
    return $this; 
} 

ответ

2

Я понял, что моя проблема связана с отсутствием разрешения типа «вид». Когда я загружаю права ресурса, теперь я предоставляю привилегию «admin» на ресурсе, если у пользователя есть какие-либо привилегии для этого ресурса. Затем я использую привилегию «admin» на странице.

<admin_users> 
    <label>Users</label> 
    <route>default</route> 
    <controller>admin</controller> 
    <action>users</action> 
    <resource>Users</resource> 
    <privilege>admin</privilege> 
</admin_users> 
-2

Вы пробовали следующее? Я не уверен, что это сработает, но у меня такое чувство.

<admin_users> 
<label>Users</label> 
<route>default</route> 
<controller>admin</controller> 
<action>users</action> 
<resource>Users</resource> 
<privilege>add</privilege> 
<privilege>edit</privilege> 
<privilege>delete</privilege> 

+0

Я пробовал это, и он не работает, даже если у пользователя есть все привилегии для этого ресурса. – Sonny

0

Вероятно, какая-то вложенности требуется передать привилегии как массив:

<admin_users> 
    <label>Users</label> 
    <route>default</route> 
    <controller>admin</controller> 
    <action>users</action> 
    <resource>Users</resource> 
    <privilege> 
     <add>add</add> 
     <edit>edit</edit> 
    </privilege> 
</admin_users> 

Edit:

здравый смысл подсказывает, что одна ссылка должна указывать на одну акцию , Вы можете добавить в меню <params> узлов.

<admin_users_edit> 
    <label>Users edit</label> 
    <route>default</route> 
    <controller>admin</controller> 
    <action>users</action> 
    <resource>Users</resource> 
    <params> 
     <do>edit</do> 
    </params> 
    <privilege> 
     <edit>edit</edit> 
    </privilege> 
</admin_users_edit> 


<admin_users_delete> 
    <label>Users delete</label> 
    <route>default</route> 
    <controller>admin</controller> 
    <action>users</action> 
    <resource>Users</resource> 
    <params> 
     <do>delete</do> 
    </params> 
    <privilege> 
     <edit>delete</edit> 
    </privilege> 
</admin_users_delete> 
+0

Я прорыл код и обнаружил, что 'Zend_Navigation_Page' допускает только одно строковое значение. Я обновляю свой пост, чтобы отразить это. – Sonny

+0

Я не уверен, что понимаю, что вы здесь показываете. Мой конкретный случай - это страница со списком, в которой отображаются записи. Если текущий пользователь может добавлять, редактировать или удалять, они должны иметь возможность видеть эту страницу, иначе нет. – Sonny