空间/laravel-menu 和空间/laravel-persmissions 的问题

我在我的 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向我显示正确的连接......

请帮忙。


holdtom
浏览 118回答 2
2回答

跃然一笑

spatie的一位成员帮助解决了这个问题:在幕后,routeIfCan 调用 app(Gate::class)->allows($ability, $ablityArguments)。我认为 Gate 在涉及多个守卫时的行为与 Auth::user() 略有不同。我在 routeIfCan 中看不到太多空间来添加额外的 $guard 或 $connection 参数,所以我建议你使用 $menu->addIf(Auth::user()->can('administrate'), ...)反而。

扬帆大鱼

这意味着您的数据库中不存在表,也许您在安装laravel-permissionpermissions后忘记运行?php artisan migrate
打开App,查看更多内容
随时随地看视频慕课网APP