我对cakePhp 2.5.x中的Acl有问题。我已经做了cakephp食谱告诉我的一切,但我仍然有一个问题。
因此,我将我的应用程序设置为有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的'add‘操作时,会出现以下错误:
Database Error错误: SQLSTATE42S22:找不到列: 1054“where子句”中的未知列“”Aro0.foreignKey“”
SQL查询: SELECT Aro.id,Aro.parent_id,Aro.model,Aro.foreign_key,Aro。来自dotcore的alias。aros AS Aro INNER JOIN dotcore。aros AS Aro0 ON (Aro。D20 <= D21。D22和D23。D24D25。D26) WHERE D27。D28= 'Group‘AND Aro0。D30= '1’ORDER BY D31。lft DESC )WHERED27=‘Group’AND Aro0。foreignKey=‘1’ORDER BYAro。lftDESC)WHEREAro0=‘aros’ANDAro0。foreignKey=‘1’ORDER BY BYAro。lftDSCD32
注意:如果要自定义此错误消息,请创建app\View\Errors\pdo_error.ctp
我知道在aros表中没有foreignKey字段,但是foreign_key,但是为什么cakephp在where子句中使用foreignKey?
请帮我解决这个问题,我找不到任何关于这个问题的帖子/问题,所以我在这里问这个问题。我真的很感谢你的回复。谢谢
发布于 2014-11-13 18:42:57
aro中的外键用于与组和用户表关联。
根据aro中的模型列值,foreign_key的处理方式不同
示例:模型=组:则foreign_key与groups表相关联。foreign_key = User :则用户与users表相关联。
组:
id name
1 Administrator
2 Manager
3 User上面的列'id‘在aro中被视为外键,但提到了Model=Group。如果在aro中使用‘Model=’,那么外键将是用户id。
用于按foreign_key检查权限的ACL列
示例:
$this->ACL->check('Group.1',$aco) 以上方法检查aco上的管理员权限。
$this->ACL->check('User.1',$aco) 上述方法检查id为1的用户在aco上的权限。
https://stackoverflow.com/questions/26616866
复制相似问题