试图了解Laravel背包Spatie权限

时间:2020-01-07 21:21:25

标签: laravel backpack-for-laravel

我已经安装了背包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,
],

请问为什么会这样?

谢谢

1 个答案:

答案 0 :(得分:1)

好的,这里是解决方法:

您需要添加最后一行(类)

        'middleware_class' => [
            App\Http\Middleware\CheckIfAdmin::class,
           \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\Backpack\CRUD\app\Http\Middleware\UseBackpackAuthGuardInsteadOfDefaultAuthGuard::class,
],

然后,您必须删除数据库中的当前角色,否则它们将保留旧的“ Web”防护设置。删除它们,并使用这个新的背包护罩重新创建它们,一切正常。