我在laravel项目中使用spatie / laravel-menu和spatie / laravel-permissions。
我创建了一个权限,将其分配给一个角色,并将该角色分配给我的用户。这很好。 然后,我使用中间件的方式以中间件方式生成了一个菜单,如下所示:
\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());
});
在我的应用程序中,我有两个具有不同连接的用户模型:
App\User;
与数据库db_a一起使用connection_a和
App\DirectoryA\User;
与数据库db_b一起使用connection_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
模型。在框架引发异常的地方放置dd()
可以向我显示正确的连接...
请帮助。
答案 0 :(得分:0)
这个平均表permissions
在您的数据库上不存在,也许您在安装laravel-permission后忘记运行php artisan migrate
吗?
答案 1 :(得分:0)
spatie的一名成员帮助解决了这个问题:
在后台,routeIfCan调用app(Gate :: class)-> allows($ ability,$ ablityArguments)。当涉及多个防护时,我认为Gate的行为与Auth :: user()略有不同。 我在routeIfCan中看不到有多少空间来添加其他$ guard或$ connection参数,因此我建议您使用$ menu-> addIf(Auth :: user()-> can('administrate'),...)代替。