Zend Navigasyon Sayfalara Çoklu ACL Ayrıcalıkları verilmesi

3 Cevap php

I Zend_Navigation kullanıyorum ve Zend_Acl ile entegre çalışıyorum. Navigasyon her sayfa privilege özniteliği vardır. Ne belirleyemiyor tek bir sayfa için birden yetkileri tanımlamak için nasıl.

Kullanıcıların yönetmek için Use case: bir sayfa. If (navigasyon) o sayfayı görüntülemek istediğiniz kullanıcının rolüne imzalanan mevcut add, edit, ya da {[(4) üzerine delete ayrıcalıklar }] kaynak.

Navigasyon XML Örnek giriş:

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

Yukarıdaki gibi bir virgülle ayrılmış listesini kullanarak istenilen davranışı borç değildir.


UPDATE

Kod kazma sonra, Zend_Navigation_Page tek bir dize değeri verir bulundu. Herkes bu sınıf uzatılabilir veya bu sınırlama başka bir yolunu bulmuştur?

/**
 * 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;
}

3 Cevap

Benim sorunum bir 'görünümü' tipi izni benim eksikliği olduğunu fark etti. Ben kaynak ayrıcalıkları yüklerken olduğumda kullanıcı bu kaynak için herhangi bir ayrıcalık varsa, şimdi kaynak üzerinde bir 'admin' yetkiyi. Sonra sayfasındaki 'admin' ayrıcalık kullanabilirsiniz.

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

Eğer aşağıdaki denediniz mi? Ben işe olsaydı emin değilim, ama verecek bir his var.

<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>

Muhtemelen iç içe çeşit bir dizi olarak ayrıcalıkları geçmek için gereklidir:

<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:

Sağduyu bir bağlantı bir eyleme işaret gerektiğini söyler. Sen menüye <params> düğümleri ekleyebilirsiniz.

<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>