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

CakePHP 2.10: Checking ACLs from outside controllers

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

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

有没有办法在其他地方执行此操作,例如从 shell class 内部或模型内部?

提前致谢!

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

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,即您不需要组件提供的抽象,那么您也可以简单地访问数据库内部使用的 Permission 模型ACL适配器,并提供检查权限的方法:

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

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

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

另见