【问题标题】:How to have different dashboards based on roles with cakedc plugins / users & acl如何使用 cakedc 插件/用户和 acl 根据角色拥有不同的仪表板
【发布时间】:2019-05-31 19:14:12
【问题描述】:

我在我的 CakePhp 应用程序中使用 CakeDC 用户和 ACL 插件。我在我的应用中为我的用户设置了不同的角色,我希望在登录后根据角色拥有不同的仪表板。

我根据文档here 用我自己的表和控制器扩展了插件,所以我有 MyUsersController 和 MyUsersTable,它们覆盖了插件的初始文件,UsersController 和 UsersTable。一切正常。我在 events.php 文件中创建了一个事件,其中包含:

use CakeDC\Users\Controller\Component\UsersAuthComponent;
use Cake\Event\Event;
use Cake\Event\EventManager;

EventManager::instance()->on(
UsersAuthComponent::EVENT_AFTER_LOGIN,
['priority' => 99], 
function (Event $event) {
    if ($event->data['user']['role_id'] === 'bbcb3031-ebed-445e-8507-f9effb2de026') //the id of my client role{
        return ['plugin' => 'CakeDC/Users', 'controller' => 'MyUsers', 'action' => 'index', '_full' => true, 'prefix' => false];
    }
}
);

但似乎覆盖不起作用,因为我有一个错误:

错误:找不到 CakeDC/Users.MyUsersController。

在我的 URL 中,我有 /users/my-users 而不是 /my-users,我不知道为什么。我已经使用包含在插件和用户控制器中的模板文件进行测试,如下所示:

function (Event $event) {
 if ($event->data['user']['role_id'] === 'bbcb3031-ebed-445e-8507- 
 f9effb2de026') //the id of role{
    return ['plugin' => 'CakeDC/Users', 'controller' => 'Users', 'action' => 'profile';
 }

而且它有效。我作为客户端登录后的 URL 重定向是 /profile。 有人可以帮我理解吗?请告诉我是否不够清楚,以及是否缺少对理解我的问题可能很重要的部分代码。

我指定我是 Cake 的初学者。

【问题讨论】:

    标签: cakephp cakephp-3.x cakedc


    【解决方案1】:

    您的自定义控制器不在 CakeDC/Users 插件中,因此您必须相应地禁用 plugin 键,以便生成正确的 URL(假设您的路由设置正确)连接到您的控制器,像这样:

    [
        'plugin' => null,
        'controller' => 'MyUsers',
        'action' => 'index',
        '_full' => true,
        'prefix' => false
    ]
    

    例如,这将匹配默认的后备路由,生成类似/my-users 的 URL。

    另见:

    【讨论】:

    • 非常感谢!它的工作原理:) 我真的不明白,谢谢你帮助我!
    猜你喜欢
    • 2015-02-06
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多