2012-02-02 64 views
0

我是Zend和PHP的新手,我正準備開始一個門戶類型應用程序的工作,該應用程序將包含多個內部應用程序。我已經設置了Zend_Auth,現在可以通過Active Directory登錄。根據用戶角色顯示/隱藏Zend視圖中的元素?

我們一直在討論如何使用Zend_Acl來設置資源,門戶中的每個應用程序都有一個資源。 Zend_Acl看起來好像會處理我們需要的授權和層次訪問資源。

經過一番研究,我發現將Zend_Acl和Zend_Navigation結合是很常見的,但有時候會遇到問題。

所要求的是,除了*利用前端控制器插件來檢查每個請求的資源訪問權限,我們改爲控制視圖(HTML)中顯示給用戶的元素。例如,如果用戶'Bob'不能訪問博客應用程序,我們不希望Bob在他的導航菜單上看到它。

對我來說,介紹所有這些邏輯和如果檢查視圖是錯誤的;我認爲他們應該儘可能地愚蠢。有沒有更好的方法來處理這個問題?根據視圖代碼中的用戶角色有條件地顯示或隱藏元素對我來說是錯誤的。

+2

這裏是一個類似的問題,看看:http://stackoverflow.com/questions/8907820/acl-and-appearance-manipulation-of-links-forms-and-dom-elements另外,我希望當你寫了「而不是利用前端控制器插件」,你實際上的意思是「除了使用前端控制器插件」;) – bububaba 2012-02-02 15:05:27

+0

@bububaba確實。謝謝你的澄清。 – 2012-02-02 15:07:47

回答

1

如果你想從視圖中刪除邏輯,我會建議使用視圖助手。這樣就可以將ACL邏輯從視圖中抽象出來。

在你CONTROLER你就需要將ACL對象傳遞給視圖的使用: -

$this->view->acl = $acl;//instance of Zend_Acl 

然後你有一個視圖助手渲染一些元素: -

class Zend_View_Helper_SomeElement extends Zend_View_Helper_Abstract 
{ 
    public function someElement() 
    { 
     $html = ''; 
     if($this->view->acl->isAllowed('guest', null, 'view'){ 
      $html .= "<div>Top secret content</div>\n"; 
     } 
     return $html; 
    } 
} 

然後你視圖如此簡單: -

echo $this->someElement(); 

這使您的視圖簡單易讀,而您的邏輯很好地隱藏起來。不理想,但在你的情況下,我認爲這是我會採取的路線。

當然,通過傳入參數,您的視圖幫助器可以做得比這更通用。