Проблема с spatie / laravel -menu и spatie / laravel -persmissions - PullRequest
0 голосов
/ 28 мая 2020

Я использую spatie / laravel -menu и spatie / laravel -persmissions в моем laravel проекте.

Я создал разрешение, назначил его роли и назначил роль моего пользователя. Это прекрасно работает. Затем я создал меню способом промежуточного программного обеспечения, используя такой макрос:

\Menu::macro('main', function () use ($request) {
    return \Menu::new()
        ->withoutWrapperTag()
        ->withoutParentTag()
        ->setActiveClassOnLink()
        ->route('preparation', 'Anstehende Termine')
        ->route('postprocessing', 'Nachbereitung')
        ->routeIfCan('administrate', 'protocols', 'Protokolle')
        ->addItemClass('nav-link')
        ->setActive($request->url());
});

В моем приложении у меня есть две модели User с разными подключениями: App\User; с использованием connection_a с базой данных db_a и App\DirectoryA\User; с использованием connection_b с базой данных db_b

В конфигурации auth определен первый, и использование Auth::user()->can('administrate') отлично работает даже в промежуточном программном обеспечении, которое определяет меню.

Поскольку я добавил пункт меню через routeIfCan, у меня ошибка. Он сообщает

Базовая таблица или представление не найдены: 1146 Таблица 'db_b.permissions' не существует (SQL: выберите permissions. *, model_has_permissions. model_id как pivot_model_id, model_has_permissions. permission_id как pivot_permission_id, model_has_permissions. model_type как pivot_model_type из permissions внутреннее соединение model_has_permissions на permissions. id = model_has_permissions. permission_id где model_has_permissions. model_id = 1 и model_has_permissions. model_type = App \ User)

Что здесь не так? Следует использовать модель App\User. Размещение dd() в точке, где фреймворк выдает исключение, показывает мне правильное соединение ...

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 04 июня 2020

Участник spat ie помог решить проблему:

Под капотом routeIfCan вызывает app (Gate :: class) -> allowed ($ capacity, $ ablityArguments). Я предполагаю, что Gate ведет себя немного иначе, чем Auth :: user (), когда дело касается нескольких охранников. Я не вижу много места в routeIfCan для добавления дополнительного аргумента $ guard или $ connection, поэтому я предлагаю вам использовать $ menu-> addIf (Auth :: user () -> can ('administrate'), ...) вместо этого.

0 голосов
/ 28 мая 2020

эта средняя таблица permissions не существует в вашей базе данных, возможно, вы забыли запустить php artisan migrate после установки laravel -разрешение ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...