spatie/laravel-menu 和 spatie/laravel-persmissions 的问题
Problem with spatie/laravel-menu and spatie/laravel-persmissions
我在我的 laravel 项目中使用 spatie/laravel-menu 和 spatie/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
添加了菜单项,因此出现错误。它告诉
Base table or view not found: 1146 Table 'db_b.permissions' doesn't exist (SQL: select permissions
.*, model_has_permissions
.model_id
as pivot_model_id
, model_has_permissions
.permission_id
as pivot_permission_id
, model_has_permissions
.model_type
as pivot_model_type
from permissions
inner join model_has_permissions
on permissions
.id
= model_has_permissions
.permission_id
where model_has_permissions
.model_id
= 1 and model_has_permissions
.model_type
= App\User)
这里出了什么问题?它应该使用 App\User
模型。在框架抛出异常的地方放置一个 dd()
向我显示正确的连接...
请帮忙。
这意味着 table permissions
在您的数据库中不存在,也许您在安装后忘记了 运行 php artisan migrate
laravel-permission?
spatie会员帮忙解决问题:
Under the hood, routeIfCan calls app(Gate::class)->allows($ability, $ablityArguments). I assume Gate behaves slightly different than Auth::user() when it comes to multiple guards.
I don't see much room in routeIfCan to add an additional $guard or $connection argument, so I suggest you use $menu->addIf(Auth::user()->can('administrate'), ...) instead.
我在我的 laravel 项目中使用 spatie/laravel-menu 和 spatie/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
添加了菜单项,因此出现错误。它告诉
Base table or view not found: 1146 Table 'db_b.permissions' doesn't exist (SQL: select
permissions
.*,model_has_permissions
.model_id
aspivot_model_id
,model_has_permissions
.permission_id
aspivot_permission_id
,model_has_permissions
.model_type
aspivot_model_type
frompermissions
inner joinmodel_has_permissions
onpermissions
.id
=model_has_permissions
.permission_id
wheremodel_has_permissions
.model_id
= 1 andmodel_has_permissions
.model_type
= App\User)
这里出了什么问题?它应该使用 App\User
模型。在框架抛出异常的地方放置一个 dd()
向我显示正确的连接...
请帮忙。
这意味着 table permissions
在您的数据库中不存在,也许您在安装后忘记了 运行 php artisan migrate
laravel-permission?
spatie会员帮忙解决问题:
Under the hood, routeIfCan calls app(Gate::class)->allows($ability, $ablityArguments). I assume Gate behaves slightly different than Auth::user() when it comes to multiple guards. I don't see much room in routeIfCan to add an additional $guard or $connection argument, so I suggest you use $menu->addIf(Auth::user()->can('administrate'), ...) instead.