我正在学习如何使用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菜单。
有什么建议吗?
答案 0 :(得分:1)
您应该使用带有括号的$user->roles()
来表示您正在从数据库中查询。
return $user->roles()->where('title', 'like', '%' . 'Admin')->count();
没有(),它已成为Collection,并且在过滤集合时,不能将LIKE与where()一起使用。请参阅Collections - Laravel Docs