2010-05-07 5 views
0

Je suis en train de construire un contrôleur pour gérer la liste de contrôle d'accès basée sur les groupes dans CakePHP et lorsque je crée ou édite un groupe, je veux pouvoir sélectionner les autorisations dont il dispose. La table de données de groupe stocke uniquement un ID de groupe et un nom de groupe lorsque les autorisations sont stockées dans la table ACO/ARO.Formulaires de données personnalisés dans CakePHP

J'ai un tableau de l'ACO que je veux transformer en un ensemble de cases à cocher afin que vous puissiez les vérifier pour permettre l'accès de ce groupe à cet ACO. Donc d'abord, comment puis-je transformer ce tableau en un ensemble de cases à cocher. Le tableau ressemble à ceci:

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

Ma question suivante est de savoir comment puis-je vérifier ces fois le formulaire a été soumis au contrôleur pour permettre aux actions sélectionnées? Ok, en changeant l'angle de ma question, comment puis-je utiliser l'assistant Form pour créer des formulaires qui ne sont basés sur aucun modèle?

Répondre

0

Vous pouvez vérifier PoundCake Control Panel (pour CakePHP 1.2) - jetez un oeil aux captures d'écran. La fonctionnalité souhaitée est présente mais les entrées radio sont utilisées à la place des cases à cocher. Les utilisateurs et les groupes sont liés aux ACO. Ainsi, en modifiant la structure arborescente des utilisateurs ou des groupes, vous modifiez la structure arborescente des ACO. Les éléments de menu sont liés aux ARO. Ainsi, en modifiant l'arborescence des menus, vous changez la structure arborescente des ARO.

Par exemple, dans 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')); 
} 
Questions connexes