2012-11-13 60 views
3

作为标题已经说过我已经遇到了CakePHP 2的Acl教程中的一个问题。 我已经完成了它在教程中提到的方式,但仍然是它不起作用。CakePHP 2:Acl教程不起作用

我知道互联网上有很多人也有这个教程的问题,但我找不到任何博客条目或任何像我一样的问题。 当我尝试访问我的应用程序的一个方向,我得到了以下错误:

Notice (8): Undefined index: group_id [APP\Model\User.php, line 98] 

和:

AclNode::node() - Couldn't find Aro node identified by "Array ([Aro0.model] => Group [Aro0.foreign_key] =>) " 

所以没有用于传输到ACL中的所有foreign_key任意值。 但是奇怪的是,在userscontroller-的功能 - 至少在foreign_key设置正确,但是当它应该被传递到ACL就消失了

Nr Query Error Affected Num. rows Took (ms) 

1 SELECT COUNT(*) AS `count` FROM `cake`.`users` AS `User` WHERE `User`.`id` = 4 
2 SELECT COUNT(*) AS `count` FROM `cake`.`users` AS `User` WHERE `User`.`id` = 4 
3 SELECT COUNT(*) AS `count` FROM `cake`.`users` AS `User` WHERE `User`.`id` = 4 
4 UPDATE `cake`.`users` SET `modified` = '2012-11-13 19:59:47' WHERE `cake`.`users`.`id` = '4' 
5 SELECT `User`.`group_id` FROM `cake`.`users` AS `User` WHERE `User`.`id` = 4 LIMIT 1 
6 SELECT `Aro`.`id`, `Aro`.`parent_id`, `Aro`.`model`, `Aro`.`foreign_key`, `Aro`.`alias` FROM `cake`.`aros` AS `Aro` LEFT JOIN `cake`.`aros` AS `Aro0` ON (`Aro`.`lft` <= `Aro0`.`lft` AND `Aro`.`rght` >= `Aro0`.`rght`) WHERE `Aro0`.`model` = 'Group' AND `Aro0`.`foreign_key` = 2 ORDER BY `Aro`.`lft` DESC 
7 SELECT `Aro`.`id`, `Aro`.`parent_id`, `Aro`.`model`, `Aro`.`foreign_key`, `Aro`.`alias` FROM `cake`.`aros` AS `Aro` LEFT JOIN `cake`.`aros` AS `Aro0` ON (`Aro`.`lft` <= `Aro0`.`lft` AND `Aro`.`rght` >= `Aro0`.`rght`) WHERE `Aro0`.`model` = 'User' AND `Aro0`.`foreign_key` = 4 ORDER BY `Aro`.`lft` DESC 
8 SELECT COUNT(*) AS `count` FROM `cake`.`aros` AS `Aro` WHERE `Aro`.`id` = 6 
9 SELECT COUNT(*) AS `count` FROM `cake`.`aros` AS `Aro` WHERE `Aro`.`id` = 6 
10 SELECT `Aro`.`parent_id` FROM `cake`.`aros` AS `Aro` WHERE `Aro`.`id` = 6 LIMIT 1 
11 SELECT `Aro`.`id`, `Aro`.`parent_id`, `Aro`.`lft`, `Aro`.`rght` FROM `cake`.`aros` AS `Aro` WHERE 1 = 1 AND `Aro`.`id` = 6 LIMIT 1 
12 SELECT `Aro`.`id`, `Aro`.`lft`, `Aro`.`rght` FROM `cake`.`aros` AS `Aro` WHERE 1 = 1 AND `Aro`.`id` = 2 LIMIT 1 
13 SELECT COUNT(*) AS `count` FROM `cake`.`aros` AS `Aro` WHERE `Aro`.`id` = 6 
14 UPDATE `cake`.`aros` SET `parent_id` = 2, `model` = 'User', `foreign_key` = 4, `id` = 6 WHERE `cake`.`aros`.`id` = '6' 
15 SELECT `Aro`.`id`, `Aro`.`parent_id`, `Aro`.`model`, `Aro`.`foreign_key`, `Aro`.`alias` FROM `cake`.`aros` AS `Aro` LEFT JOIN `cake`.`aros` AS `Aro0` ON (`Aro`.`lft` <= `Aro0`.`lft` AND `Aro`.`rght` >= `Aro0`.`rght`) WHERE `Aro0`.`model` = 'Group' AND `Aro0`.`foreign_key` IS NULL ORDER BY `Aro`.`lft` DESC 

从错误信息的行是:

public function bindNode($user) { 
    return array('model'=>'Group','foreign_key'=>$user['User']['group_id']); 
} 

那么,为什么foreign_key的值首先是'2'(应该是这样),之后是NULL?

我希望你们中的一些人能够帮助我。 谢谢。

PS:大家谁宁愿我的问题的德语版,here

UPDATE: 我能够撑过这对于userscontroller的所有职能的工作:

public function bindNode() { 
    $this->id; 
    $data = $this->read(); 
    return array('model' => 'Group', 'foreign_key' => $data['User']['group_id']); 
    } 

但是对于所有其他控制器它仍然是相同的。 有没有任何一个想法如何我可以在模型中获取用户数据,以便它也适用于其他控制器?

回答

4

我知道它有点愚蠢回答我自己的问题,但不是删除问题,我认为这将是更好的将它留在这里为任何人有同样的问题,因为似乎没有回答这个互联网。

我可以通过下面的代码来解决这个问题:

public function bindNode() { 
    $data = AuthComponent::user(); 
    return array('model' => 'Group', 'foreign_key' => $data['User']['group_id']); 
    } 

它似乎很好地工作,也许它可以帮助一些人;)