我已经安装了背包4和Spatie。 https://github.com/spatie/laravel-permission
我创建了2个角色: 后台管理面板(背包随附的CRUD)中的“管理员和用户”。
然后我添加了2个权限: 1个叫做“读取管理员链接” 1个称为“读取用户链接”
我已经为每个角色分配了权限: 读取管理员链接=管理员角色 读取用户链接=用户角色
我在管理面板中看到了正确分配给角色的权限。
现在在左侧导航栏上,我想以管理员身份登录时看到一个菜单,或者以用户身份登录时看到另一个菜单。
但是我无法使它工作:
<li>
<ul>
@if(auth()->backpack_user()->can('read admin link'))
<li class="nav-item"><a class="nav-link" href=""><i class="nav-icon fa fa-user"></i> <span>Can only
be seen by admins</span></a></li>
@endif
@if(auth()->backpack_user()->can('read user link'))
<li class="nav-item"><a class="nav-link" href=""><i class="nav-icon fa fa-user"></i> <span>Can only
be seen by users</span></a></li>
@endif
</ul>
</li>
此权限检查器(登录时):
@if(auth()->backpack_user()->can('xxxxxxxxxxx'))
@endif
导致此错误:
Facade\Ignition\Exceptions\ViewException
Method Illuminate\Auth\SessionGuard::backpack_user does not exist. (View:
C:\laragon\www\demo\resources\views\vendor\backpack\base\inc\sidebar_content.blade.php)
这是我的base.php设置:
'middleware_class' => [
App\Http\Middleware\CheckIfAdmin::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
// \Backpack\CRUD\app\Http\Middleware\UseBackpackAuthGuardInsteadOfDefaultAuthGuard::class,
],
请问为什么会这样?
谢谢
答案 0 :(得分:1)
好的,这里是解决方法:
您需要添加最后一行(类)
'middleware_class' => [
App\Http\Middleware\CheckIfAdmin::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\Backpack\CRUD\app\Http\Middleware\UseBackpackAuthGuardInsteadOfDefaultAuthGuard::class,
],
然后,您必须删除数据库中的当前角色,否则它们将保留旧的“ Web”防护设置。删除它们,并使用这个新的背包护罩重新创建它们,一切正常。