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

时间:2018-03-20 15:43:50

标签: php cakephp acl

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

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

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

提前致谢!

1 个答案:

答案 0 :(得分:2)

那么,您可以执行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');

另见