Laravel 权限和角色与 Gate/Can
Posted
技术标签:
【中文标题】Laravel 权限和角色与 Gate/Can【英文标题】:Laravel Permissions and Roles with Gate/Can 【发布时间】:2017-09-07 18:49:12 【问题描述】:目前我在 codecourse.com 上做了一个名为“laravel 中的角色和权限”的教程。
在教程的第 4 部分中,我遇到了每次结果为真时都会遇到的问题。 如果我请求“编辑帖子”的许可,它应该显示为真,如果我请求“删除帖子”的许可,它应该显示为假。
我查了数据库关系,但是用户和“删除帖子”权限没有关系。
只有当我请求一个不存在的权限时,比如“blabla”(我的意思是数据库中不存在),我才会得到错误。
我相信他只是在检查是否有使用此名称的权限,而不是检查用户是否具有权限。
web.php
Route::get('/', function (\illuminate\Http\Request $request)
$user = $request->user();
dump($user->can("delete posts")););
HasPermissionTrait.php
trait HasPermissionsTrait
public function hasRole(...$roles)
foreach ($roles as $role)
if ($this->roles->contains('name', $role))
return true;
return false;
public function hasPermissionTo($permission)
//Check has permission through role
return $this->hasPermission($permission);
protected function hasPermission($permission)
return (bool) $this->permissions->where('name', $permission->name);
public function roles()
return $this->belongsToMany(Role::class, 'users_roles');
public function permissions()
return $this->belongsToMany(Permission::class, 'users_permissions');
PermissionsServiceProvider.php
public function boot()
Permission::get()->map(function ($permission)
Gate::define($permission->name, function ($user) use ($permission)
return $user->hasPermissionTo($permission);
);
);
/**
* Register the application services.
*
* @return void
*/
public function register()
//
你可以在这里观看我的完整代码 -> https://github.com/RahmanG/joko
在这张图片上,您可以看到 Auth。没有“删除帖子”的权限。但你可以看到 Gate 是真的。
https://imgur.com/a/gf923
感谢您的支持
【问题讨论】:
需要注册那个 PermissionServiceProvder 吗?? 【参考方案1】:我已经得到了答案。感谢来自 laracasts.com 的 tykus
泰库斯:
看起来你的特质可能有错误:
protected function hasPermission($permission)
return (boolean) $this->permissions->where('name', $permission->name);
$this->permissions->where('name', $permission->name) 返回一个 Builder 实例,并且转换为布尔值的对象始终为 true。
您可能需要返回一个计数或第一个 - 如果没有权限,这将是错误的,例如
protected function hasPermission($permission)
return (boolean) $this->permissions->where('name', $permission->name)->count();
【讨论】:
以上是关于Laravel 权限和角色与 Gate/Can的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel spatie 中分配多个角色和基于多个角色的权限?