CakePHP 2.10:检查来自外部控制器的ACL

CakePHP 2.10:检查来自外部控制器的ACL,php,cakephp,acl,Php,Cakephp,Acl,有没有办法在控制器之外检查CakePHP(2.10)中的ACL?我知道,您可以通过包含AclComponent,然后执行以下操作,从内部的控制器中检查ACL: $canEdit=$this->Acl->check('User.1','Post.1','update') 有没有其他方法可以做到这一点,例如从shell类内部或从模型内部 提前谢谢 那么,您可以像ACL shell那样使用组件。就我个人而言,我并不喜欢这样,因为组件是控制器层的服务,但是CakePHP 2.x在内部就是这样做的,ACL

有没有办法在控制器之外检查CakePHP(2.10)中的ACL?我知道,您可以通过包含AclComponent,然后执行以下操作,从内部的控制器中检查ACL:

$canEdit=$this->Acl->check('User.1','Post.1','update')

有没有其他方法可以做到这一点,例如从shell类内部或从模型内部


提前谢谢

那么,您可以像ACL shell那样使用组件。就我个人而言,我并不喜欢这样,因为组件是控制器层的服务,但是CakePHP 2.x在内部就是这样做的,ACL适配器也与组件纠缠在一起,因此对于控制器层,请参见
AclInterface::initialize()
,它需要
组件
实例

App::uses('Controller', 'Controller');
App::uses('ComponentCollection', 'Controller');
App::uses('AclComponent', 'Controller/Component');

$controller = new Controller();
$collection = new ComponentCollection();
$Acl = new AclComponent($collection);
$Acl->startup($controller);

$canEdit = $Acl->check('User.1', 'Post.1', 'update');
如果您只使用数据库支持的ACL,即不需要组件提供的抽象,那么您也可以简单地访问
权限
模型,该模型由数据库ACL适配器内部使用,并提供检查权限的方法:

App::uses('ClassRegistry', 'Utility');

$Permission = ClassRegistry::init(array(
    'class' => 'Permission',
    'alias' => 'Permission'
));

$canEdit = $Permission->check('User.1', 'Post.1', 'update');
另见


好吧,您可以像ACL外壳一样使用组件。就我个人而言,我并不喜欢这样,因为组件是控制器层的服务,但是CakePHP 2.x在内部就是这样做的,ACL适配器也与组件纠缠在一起,因此对于控制器层,请参见
AclInterface::initialize()
,它需要
组件
实例

App::uses('Controller', 'Controller');
App::uses('ComponentCollection', 'Controller');
App::uses('AclComponent', 'Controller/Component');

$controller = new Controller();
$collection = new ComponentCollection();
$Acl = new AclComponent($collection);
$Acl->startup($controller);

$canEdit = $Acl->check('User.1', 'Post.1', 'update');
如果您只使用数据库支持的ACL,即不需要组件提供的抽象,那么您也可以简单地访问
权限
模型,该模型由数据库ACL适配器内部使用,并提供检查权限的方法:

App::uses('ClassRegistry', 'Utility');

$Permission = ClassRegistry::init(array(
    'class' => 'Permission',
    'alias' => 'Permission'
));

$canEdit = $Permission->check('User.1', 'Post.1', 'update');
另见