为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
holdtom 2023-04-21 13:54:42
我在我的 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'), ...)反而。


查看完整回答
反对 回复 2023-04-21
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

这意味着您的数据库中不存在表,也许您在安装laravel-permissionpermissions后忘记运行?php artisan migrate



查看完整回答
反对 回复 2023-04-21
  • 2 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信