Spatie / laravel菜单和Spatie / laravel权限问题

时间:2020-05-28 07:53:23

标签: php laravel menu laravel-permission

我在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_permissionsmodel_id作为pivot_model_idmodel_has_permissionspermission_idpivot_permission_idmodel_has_permissionsmodel_typepivot_model_type,来自permissions内部联接model_has_permissions permissionsid = model_has_permissionspermission_id其中model_has_permissionsmodel_id = 1和model_has_permissionsmodel_type =应用\用户)

这是怎么回事?它应该使用App\User模型。在框架引发异常的地方放置dd()可以向我显示正确的连接...

请帮助。

2 个答案:

答案 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'),...)代替。