如何使用CakePHP用户插件创建公共方法

如何使用CakePHP用户插件创建公共方法,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,我在CakePHP 3.x上使用CakeDC插件创建简单的基于角色的授权 我有一堆需要登录才能访问的/admin/routes。我创建了一个我想公开的新操作,但由于某些原因,我一直被发送到登录。以下是我现有的permissions.php: return [ 'Users.SimpleRbac.permissions' => [ # Admins can do anything [ 'role' => 'admin',

我在CakePHP 3.x上使用CakeDC插件创建简单的基于角色的授权

我有一堆需要登录才能访问的/admin/routes。我创建了一个我想公开的新操作,但由于某些原因,我一直被发送到登录。以下是我现有的permissions.php:

return [
    'Users.SimpleRbac.permissions' => [
        # Admins can do anything
        [
            'role' => 'admin',
            'plugin' => '*',
            'prefix' => '*',
            'controller' => '*',
            'action' => '*',
        ],
        # Users can only see a list and view an item
        [
            'role' => 'user',
            'plugin' => false,
            'prefix' => 'admin',
            'controller' => '*',
            'action' => ['index', 'view', 'search'],
        ],
        # Only allow a user to logout within the CakeDC/User's plugin
        [
            'role' => 'user',
            'prefix' => '*',
            'plugin' => 'CakeDC/Users',
            'controller' => 'Users',
            'action' => ['logout'],
         ],
    ],
];
以下是我试图补充的不起作用的内容:


我遗漏了什么???

事实证明我的问题与CakeDC/Users插件几乎没有关系。看来我的“非CRUD”操作名导致CakePHP不允许它。我不完全明白为什么。但是当我加上

public function beforeFilter(Event $event)
{
    parent::beforeFilter($event);
    $this->Auth->allow('dispatch');
}

一切正常。

这意味着您允许所有经过身份验证的用户(所有角色)使用该方法。如果您想要公共方法,您应该使用$this->Auth->allow('dispatch');正如你已经发现的。
public function beforeFilter(Event $event)
{
    parent::beforeFilter($event);
    $this->Auth->allow('dispatch');
}