Пользовательские формы данных в CakePHP - PullRequest
0 голосов
/ 07 мая 2010

Я создаю контроллер для управления ACL на основе групп в CakePHP, и когда я создаю или редактирую группу, я хочу иметь возможность выбирать, какие у нее есть разрешения.В таблице данных группы хранятся только идентификатор группы и имя группы, поскольку разрешения хранятся в таблице ACO / ARO.

У меня есть массив из ACO, который я хочу превратить в набор флажков, чтобы вы моглиможете проверить их, чтобы разрешить доступ из этой группы к этому ACO.Итак, во-первых, как мне превратить этот массив в набор флажков.Массив выглядит следующим образом:

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

Мой следующий вопрос: как я могу проверить их после отправки формы в контроллер, чтобы разрешить выбранные действия?

[Обновить] Ok changeс моей точки зрения, как я могу использовать помощник по формам для создания форм, не основанных на какой-либо модели?

1 Ответ

0 голосов
/ 07 мая 2010

Вы можете проверить Панель управления PoundCake (для 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'));
}
...