我在cakePhp 2.5.x中遇到了问题。我已经完成了cakephp cookbook告诉我的所有事情,但我仍有问题。
所以我设置我的应用程序有3组。管理员,经理和用户,就像在食谱中一样。 此时我的应用只有1个用户,该用户属于管理员。管理员可以做任何事情
这是我的AppController代码:
class AppController extends Controller {
public $components = array(
'Acl',
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'users',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'users',
'action' => 'login'
),
'authenticate' => array(
'Form' => array(
'passwordHasher' => 'Blowfish'
)
),
'authorize' => array(
'Actions' => array('actionPath'=>'controllers'),
),
)
);
public function beforeFilter(){
//not thinked yet
parent::beforeFilter();
//$this->initDB();
}
public function initDB(){
$group = $this->User->MemberOf;
// Allow admins to everything
$group->id = 1;
$this->Acl->allow($group, 'controllers');
}
}
和UsersController
类UsersController扩展AppController {
public $helpers = array('Html','Form');
public $uses = array("User","Group");
// callbacks
public function beforeFilter(){
parent::beforeFilter();
问题是当我(管理员,我已登录)想要拨打'添加' UsersController cakephp的动作给我这个错误:
Database Error
错误:SQLSTATE [42S22]:未找到列:1054未知列' Aro0.foreignKey'在' where子句'
SQL查询:SELECT Aro
。id
,Aro
。parent_id
,Aro
。model
,Aro
。{ {1}},foreign_key
。Aro
FROM alias
。dotcore
AS aros
INNER JOIN Aro
。dotcore
AS {{ 1}} ON(aros
。Aro0
< = Aro
。lft
和Aro0
。lft
> = Aro
。rght
)WHERE Aro0
。rght
='群组'和Aro0
。model
=' 1' ORDER BY Aro0
。foreignKey
DESC
注意:如果要自定义此错误消息,请创建app \ View \ Errors \ pdo_error.ctp
我知道在aros表中没有foreignKey字段,但是foreign_key,但为什么cakephp在where子句中使用foreignKey?
请帮我解决这个问题,我找不到关于这个问题的任何帖子/问题,所以我在这里问这个问题。 我非常感谢你的回复。谢谢
答案 0 :(得分:0)
aro中的外键用于与您的组和用户表关联。
根据aro中的模型列值,foreign_key区别对待
示例: model = Group:然后foreign_key与groups表关联。 model = User:然后foreign_key与users表相关联。
基团:
id name
1 Administrator
2 Manager
3 User
以上专栏' id'被视为aro中的外键,但提到Model = Group。 如果Model =' User'在aro中,外键将是用户ID。
用于通过ACL检查权限的foreign_key列
示例:
$this->ACL->check('Group.1',$aco)
以上方法检查aco的管理员权限。
$this->ACL->check('User.1',$aco)
上面的方法检查aco上id为1的用户的权限。