Cakehp Acl' Aro0.foreignKey'在' where子句''

时间:2014-10-28 19:27:33

标签: php cakephp

我在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 AroidAroparent_idAromodelAro。{ {1}},foreign_keyAro FROM aliasdotcore AS aros INNER JOIN Arodotcore AS {{ 1}} ON(arosAro0< = ArolftAro0lft> = Arorght)WHERE Aro0rght ='群组'和Aro0model =' 1' ORDER BY Aro0foreignKey DESC

注意:如果要自定义此错误消息,请创建app \ View \ Errors \ pdo_error.ctp

我知道在aros表中没有foreignKey字段,但是foreign_key,但为什么cakephp在where子句中使用foreignKey?

请帮我解决这个问题,我找不到关于这个问题的任何帖子/问题,所以我在这里问这个问题。 我非常感谢你的回复。谢谢

1 个答案:

答案 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的用户的权限。