2013-12-18 46 views
-1

我想使用Kohana 3.3作爲我自己寫的「框架」的替代品,目前我正在使用我的webapp。您能否告訴我是否可以滿足以下要求以及如何實現這一目標?Kohana 3.3 - 可以通過權限管理創建動態菜單嗎?

  1. 我的應用程序由幾個控制器組成,我想通過菜單訪問。該菜單應該動態創建,以便新創建的控制器將立即顯示。另外,菜單應該排除當前登錄用戶無法訪問的控制器。

  2. 每個控制器必須能夠在執行操作之前檢查用戶的角色(例如全局管理員,特定於控制器的管理員,普通用戶)。根據這個角色,每個控制器必須能夠允許或禁止訪問。 (思考一個基於組員成員的方法)。

  3. 我想爲菜單和每個控制器輸出使用一個單獨的模板(據我所知aka partial)。他們都應該與「框架」模板(包括頁眉,頁腳,登錄信息等)合併。我看到有一個特殊的模板控制器(template_controller iirc) - 這是我使用的基本控制器嗎?我應該創建一個基礎控制器來管理我的「模板」,並以某種方式將其他控制器嵌入其中?!

  4. 此外,如果每個控制器都有能力將當前請求識別爲ajax或非ajax並相應地調整渲染(在大多數情況下,再渲染整個站點對於ajax來說不是理想的)。

我將不勝感激每一個答案! 在此先感謝。

回答

1
  1. 是的,但是你必須自己搜索控制器文件AFAIK。

  2. 是的,看到before()

    2.1如果你想保留它在一個地方,你就只需要編寫一些額外的東西specifiy其操作需要什麼特權。查看Kohana的Request這個類,你可以用它來做一些漂亮的東西(我想說看一下url,uri和請求方法,我不知道它們究竟幹什麼)

    2.2你可以也可以在每個控制器的基礎上進行;例如Controller_Admin可以做以下醜陋的單行(在下面的檢查代碼片段2.2)。我建議將它分開一點,例如給你的基地控制器一個protected $_user變量,它填充它的before()方法,然後用$this->_user而不是Auth的東西。

  3. 這是Controller_Template但是,是的,你說對了;)

  4. 喜歡這個? Request::$current->is_ajax()http://kohanaframework.org/3.3/guide-api/Request#is_ajax

片段爲2.2:

if (! Auth::instance()->get_user()->has('role', ORM::factory('Role', array('name' => 'admin'))) 
    throw new HTTP_Exception_403('Permission denied!'); 
+0

你的答案是非常有幫助,謝謝!我以前看過所有的東西(除了is_ajax--不知道爲什麼我錯過了這些),但不知道如何使用它。 但有一個問題仍然涉及菜單創建。搜索控制器應該不是問題(雖然我認爲可以從路由數組中提取控制器),但我應該在哪裏放置這個函數/方法?還在之前()?或者在我從主控制器調用的Controller_Menu中?這對我來說很新,所以請原諒我愚蠢的問題。 – Apollo13

+0

我可能會把它放在專用的'Controller_Menu'中。 Kohana是一個HMVC框架,因此您可以觸發內部請求並將這些請求的響應放入模板中。 (){if(!$ this-> auto_render或!$ this-> request-> is_ajax()){$ this-> template-> menu = Request :: factory('菜單') - >執行(); }}'或類似的東西 – AmazingDreams

+0

是的,你可以'$ this-> request-> controller()',但是這不會在你的應用程序中給你所有可能的控制器。從routes數組中提取所有控制器將強制您單獨定義每個路由,而'bootstrap.php'中的默認路由將覆蓋大多數常規應用程序。我建議你去編寫一些你自己定義控制器和權限的數組,或者讓每個控制器執行自己的檢查。 – AmazingDreams