Laravel 5.8是Admin Gate吗?

时间:2019-08-14 08:51:41

标签: laravel laravel-5 eloquent laravel-blade

我正在学习如何使用Gate和@can东西

我拥有的AuthServiceProvider中

public function boot()
{
    $this->registerPolicies();
    $this->registerPostPolicies();
}

public function registerPostPolicies()
{
    Gate::define('isAdmin', function($user) {
        return $user->roles->where('title', 'like', '%' . 'Admin')->count();
    });
}

我的刀刃中有

...
            @can('isAdmin')
                <a aria-disabled="false" href="{{ route('admin.home')}}" target="_self" class="dropdown-item" role="menuitem" ><i class="fa fa-upload"></i> Admin Menu</a>  
            @endcan 
...

对于我拥有的角色

| id | title       | 
+----+-------------+-
|  1 | Admin       | 
|  2 | User        | 
|  3 | Group Admin | 
|  4 | Site Admin  | 
+----+-------------+-

为什么是这样的%Admin查询...

但是我发现的是该门似乎不起作用..它只是阻塞了所有人..我想为角色名称中带有Admin的任何人启用Admin菜单。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您应该使用带有括号的$user->roles()来表示您正在从数据库中查询。

return $user->roles()->where('title', 'like', '%' . 'Admin')->count();

没有(),它已成为Collection,并且在过滤集合时,不能将LIKE与where()一起使用。请参阅Collections - Laravel Docs