【问题标题】:CakePHP 2.10: Checking ACLs from outside controllersCakePHP 2.10:从外部控制器检查 ACL
【发布时间】:2018-03-20 15:43:50
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

    标签: php cakephp acl


    【解决方案1】:

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

    App::uses('ClassRegistry', 'Utility');
    
    $Permission = ClassRegistry::init(array(
        'class' => 'Permission',
        'alias' => 'Permission'
    ));
    
    $canEdit = $Permission->check('User.1', 'Post.1', 'update');
    

    另见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2012-03-20
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多