2011-06-10 130 views
1

我正在開發一個網站codeigniter分爲模塊使用HMVC。我希望管理員啓用/禁用模塊,以下是我計劃實現它的方式。由於我在PHP/Codeigniter方面沒有太多經驗,因此以下方法可能會非常錯誤,所以我正在尋找建議/反饋:Codeigniter模塊配置和ACL

數據庫表:模塊 ID | NAME |狀態

上表將包含所有模塊信息,並且狀態字段將包含禁用/啓用值(0或1)。

我要延長主要是CI_Controller,並有一個函數來檢查模塊的狀態:

class MY_Controller extends CI_Controller{ 
public function __construct() 
{ 
parent::__construct(); 
$this->load->Model('Module_model'); //loads the module model 
} 
function check_module_state($module_name = '') 
{ 
return $this->Module_model->getState($module_name); //the model returns TRUE or FALSE 
} 

現在,每個控制器的構造函數中,我將擴展MY_Controller類和呼叫check_module_state,如果它返回FALSE,則會將用戶重定向到「Section Disabled Page」;

class Module1 extends MY_Controller{ 
public function __construct() 
{ 
parent::__construct(); 
if($this->check_module_state('module1') == FALSE) 
redirect('module_disabled', 'location'); 
} 
} 

請問上述工作是否有更好更容易的選擇? 謝謝

回答

2

看起來沒問題。您如何描述功能聽起來不錯。然而,我會說,如果一個模塊被禁用,則不必告訴人們它被禁用。

我會如何處理這個問題如下。

我會使用模塊表來構造導航項目。如果啓用模塊,則允許將鏈接顯示到該模塊。如果模塊被禁用,則不顯示鏈接。這並不意味着你可以擺脫控制器的安全性,因爲人們可能仍然會使用URL Surf。在URL衝浪到禁用模塊的情況下,我會靜默地重定向到默認模塊,例如站點根(索引)。

+0

是的,沒有顯示禁用模塊的鏈接是一個好主意。說到這些,如何有效地管理菜單?我打電話在視圖文件中做這件事嗎?如果($ this-> Modules_model-> isActive('module1')echo'module1';' '這樣,我認爲它會調用所有模塊的數據庫顯示在菜單上。我調用數據庫一次,並將模塊名稱和它的狀態存儲在一個數組中,然後檢查數組的狀態? – WebNovice 2011-06-10 07:56:25

+0

@Damchey這是一個可能的解決方案是。我不使用CI,但如果它的任何類似ZF並支持現場廣泛的默認佈局,那麼你可以堅持你的導航的東西都在那裏。 – martynthewolf 2011-06-10 08:01:20