【问题标题】:How to create public method with CakePHP Users plugin如何使用 CakePHP 用户插件创建公共方法
【发布时间】:2023-06-24 14:34:01
【问题描述】:

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

我有一堆需要登录才能访问的 /admin/ 路由。我创建了一个我想公开的新操作,但由于某种原因,我不断被发送登录。这是我现有的 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'],
         ],
    ],
];

这是我试图补充的 没有 工作:

        ...
        # anyone is allowed to do the .../dispatch method
        [
            'role' => '*',
            'controller' => '*',
            'action' => ['dispatch'],
         ],

我错过了什么??

【问题讨论】:

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

标签: php cakephp cakephp-3.0


【解决方案1】:

原来我的问题与 CakeDC/Users 插件一点关系都没有。似乎我的“非 CRUD”动作名称导致 CakePHP 不允许它。我不完全明白为什么。但是当我添加...

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

一切都按预期进行。

【讨论】: