2011-02-24 88 views
2

我有一個Zend_Navigation,其中運行的是由navigation.xml文件提供的數據。假設第一級(0)由兩個頁面組成,前端和後端。前端只能通過管理員角色訪問來賓角色,後端可訪問前端。Zend_Navigation:獲取當前用戶/角色可訪問的頁面

如果我做了

<?php echo $this->navigation()->menu()->setMaxDepth(0); ?> 

它正確地顯示「前端」鏈接時,不登錄,無論是「前端」和「後端」的鏈接作爲管理員登錄時。

但是,顯示「前端」鏈接對客人來說沒有太大意義,因爲他們沒有任何其他頁面可以在該層次上導航到該層。所以我寧願不顯示那個導航爲客人。

我知道我可以做

<?php 
if ('guest' !== $this->view->role) { 
    echo $this->navigation()->menu(); 
} 
?> 

,但我希望有一個更好的方式來做到這一點。

我正在尋找的是類似

<?php 
if (count($this->navigation()->getPagesForRole($this->view->role)) > 1) { 
    echo $this->navigation()->menu(); 
} 
?> 

我無法弄清楚如何與Zend_Navigation提供的API來實現這個...我看到有一個GETPAGES()方法,但它將返回所有頁面「未過濾」。

我認爲這是一個簡單的解決方案,但我一直試圖找出過去兩個小時,並沒有發現任何東西,所以我想我看着錯誤的方向。

謝謝你的時間。

編輯:

我忘了提,導航已經使用ACL來控制的權限,它的正常工作。我唯一的問題是,我不想爲來賓顯示前端/後端導航,因爲只導航一個鏈接項目是沒用的。 對此感到抱歉。

回答

0

您可以使用Zend_Acl裏這個
Zend_Navigation可以用它

0

工作,你可以用Zend_Navigation整合Zend_Acl。看here

5

Zend Navigation需要一個Zend_Acl實例來實現。您必須調整您的導航配置以包含資源/特權信息,例如

$navArray = array(
…, 
    array(
     'module' => 'admin', 
     'label' => 'Administration', 
     'resource' => 'admin', 
     'privilege' => 'index', 
     'pages' => array( 
    … 
); 

http://framework.zend.com/manual/en/zend.navigation.containers.html

然後,你需要設置ACL定義這些資源和權限的任何訪問限制。

$acl = new Zend_Acl(); 
    $acl->addRole(new Zend_Acl_Role('user')) 
     ->addRole(new Zend_Acl_Role('admin')); 

    … 

http://framework.zend.com/manual/en/zend.acl.introduction.html

你的ACL已被設置爲導航幫助,與當前用戶

$this->getHelper('Navigation') 
    ->setAcl($acl) 
    ->setRole('user'); 

之後的角色一起,在助手API的調用應該是意識到ACL。在上面的示例中,如果在ACL中不允許用戶訪問管理菜單,則不應呈現管理菜單。

其他資源:

+0

感謝您詳細的解答。我忘了提及我已經在使用Zend_Acl,而且工作正常。對於那個很抱歉。 – jgxvx 2011-02-24 11:18:00

+0

@ jgxvx只是確保客人沒有訪問權限,然後導航中的任何項目。 – Gordon 2011-02-24 11:54:23

相關問題