我在我的 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 關注
- 147 瀏覽
添加回答
舉報
0/150
提交
取消