3

を使用してZend_Navigationおり、統合しようとしていZend_Aclます。ナビゲーションの各ページにはprivilege属性があります。私が判断できないのは、1 つのページに複数の特権を定義する方法です。

ユースケース:ユーザーを管理するためのページ。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;
}
4

3 に答える 3

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>
于 2010-04-30T17:05:09.750 に答える
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>

編集:

常識では、1 つのリンクが 1 つのアクションを指す必要があります。<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>
于 2010-04-29T13:51:39.217 に答える
-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>

于 2010-03-16T06:09:34.717 に答える