CakePHP中的自定义数据表格
问题描述:
我正在构建一个控制器来管理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
)
我的下一个问题是,我怎么能检查这些曾经的表单被提交到控制器,以允许选择的行为?
[更新] 确定改变我的问题的角度,我如何使用窗体帮助器来创建不基于任何模型的窗体?
答
您可能想要检查PoundCake Control Panel(对于CakePHP 1.2) - 请查看屏幕截图。你想要的功能是存在的,但使用无线电输入而不是复选框。用户和组与ACO相关联。因此,更改用户或组树结构可以更改ACO的树形结构。菜单项目链接到ARO。所以,改变菜单的树形结构可以改变ARO的树形结构。
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'));
}