Как использовать разные инструментальные панели в зависимости от ролей с помощью плагинов / пользователей cakedc и ACL

Я использую плагины CakeDC Users & ACL в своем приложении CakePhp. У меня есть разные роли для моих пользователей в моем приложении, и я хотел бы иметь разную информационную панель, основанную на ролях после входа в систему. Я расширяю плагин своей собственной таблицей и контроллером, основываясь на приведенной здесь документации, поэтому у меня есть 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];
    }
}
);

Но кажется, что переопределение не работает, потому что у меня есть ошибка:

 Error: CakeDC/Users.MyUsersController could not be found.

В моем 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 перенаправляется после входа в систему как клиент / профиль. Может ли кто-нибудь помочь мне понять? Пожалуйста, скажите мне, если это не достаточно ясно, и если отсутствуют части кода, которые могут быть важны для понимания моей проблемы.

Я уточняю, что я новичок в Cake:)

Спасибо

1 ответ

Ваш пользовательский контроллер не живет в CakeDC/Users плагин, следовательно, вы должны отключить plugin соответственно, введите правильный URL-адрес (при условии, что ваши маршруты настроены правильно), который подключается к вашему контроллеру, например:

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

Это, например, соответствует запасным маршрутам по умолчанию, генерируя URL /my-users,

Смотрите также:

Другие вопросы по тегам