2010-05-07 101 views
0

我正在構建一個控制器來管理CakePHP中的基於組的ACL,並且當我創建或編輯組時,我希望能夠選擇它具有的權限。組數據表只存儲組ID和組名,因爲權限存儲在ACO/ARO表中。CakePHP中的自定義數據表格

我有一個ACO數組,我想變成一組複選框,以便您可以檢查它們以允許從該組訪問該ACO。所以首先,我怎麼把這個數組變成一組複選框。該陣列是這樣的:

array(
    [0] => array(
     [Aco] => array(
      [alias] => 'alias' 
      [id] => 1) 
     [children] => array (
      [0] => array(
       [Aco]=> 
      ...etc 
    )) 
    [1] => array(
     ...etc 
) 

我的下一個問題是,我怎麼能檢查這些曾經的表單被提交到控制器,以允許選擇的行爲?

[更新] 確定改變我的問題的角度,我如何使用窗體幫助器來創建不基於任何模型的窗體?

回答

0

您可能想要檢查PoundCake Control Panel(對於CakePHP 1.2) - 請查看屏幕截圖。你想要的功能是存在的,但使用無線電輸入而不是複選框。用戶和組與ACO相關聯。因此,更改用戶或組樹結構可以更改ACO的樹形結構。菜單項目鏈接到ARO。所以,改變菜單的樹形結構可以改變ARO的樹形結構。

例如,在groups_controller.php

public function permissions($id = null){ 
    $this->_checkIdPresence($id); 
    if(!empty($this->data)){ 
     $aroNode = array('model' => 'Group', 'foreign_key' => $this->data['Group']['id']); 
     foreach($this->data['Acos'] as $aco){ 
      if(!empty($aco['permission'])){ 
       $do = ''; 
       if($aco['permission'] == '1'){ 
        $do = 'allow'; 
       }elseif($aco['permission'] == '-1'){ 
        $do = 'deny'; 
       } 
       $acoNode = array('model' => $aco['model'], 'foreign_key' => $aco['foreign_key']); 
       if($this->Acl->{$do}($aroNode, $acoNode, '*')){ 
        $message = sprintf(__('<i>%s</i> permission to <i>%s</i> has been saved.', true),ucfirst($do), $aco['name']); 
        $this->_flash($message, 'success'); 
       }else{ 
        $message = sprintf(
         __('<i>%s</i> permission to <i>%s</i> could not be saved. Please, try again.', true), 
         ucfirst($do), $aco['name'] 
        ); 
        $this->_flash($message, 'error'); 
       } 
      } 
     } 
    } 
    // Get ARO for the current Group and all related ACOs from the db 
    $this->data = $this->Group->read(null, $id); 
    $acosTree = $this->ControlPanel->checkPermissions($id); 
    $existingPermissions = $this->ControlPanel->findRecordedPermissions($id); 
    $this->set(compact('acosTree', 'existingPermissions')); 
}