我在我的 laravel 项目中使用 space/laravel-menu 和 space/laravel-persmissions。我已经创建了一个权限,将其分配给一个角色,并将该角色分配给我的用户。这很好用。然后我使用像这样的宏以中间件方式生成了一个菜单:\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;将 connection_a 与数据库 db_a 结合使用,并将 App\DirectoryA\User;connection_b 与数据库 db_b 结合使用在 auth 配置中,第一个被定义,并且使用Auth::user()->can('administrate')工作正常,即使在定义菜单的中间件中也是如此。由于我已通过 添加菜单项routeIfCan,因此出现错误。它说未找到基表或视图:1146 表 'db_b.permissions' 不存在(SQL:选择. permissions*, .as , model_has_permissions.as model_id, .as from inner join on . = . where . = 1 and . = App\User )pivot_model_idmodel_has_permissionspermission_idpivot_permission_idmodel_has_permissionsmodel_typepivot_model_typepermissionsmodel_has_permissionspermissionsidmodel_has_permissionspermission_idmodel_has_permissionsmodel_idmodel_has_permissionsmodel_type这里出了什么问题?它应该使用App\User模型。dd()在框架抛出异常的地方放置 a向我显示正确的连接......请帮忙。
2 回答
跃然一笑
TA贡献1826条经验 获得超6个赞
spatie的一位成员帮助解决了这个问题:
在幕后,routeIfCan 调用 app(Gate::class)->allows($ability, $ablityArguments)。我认为 Gate 在涉及多个守卫时的行为与 Auth::user() 略有不同。我在 routeIfCan 中看不到太多空间来添加额外的 $guard 或 $connection 参数,所以我建议你使用 $menu->addIf(Auth::user()->can('administrate'), ...)反而。
- 2 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消