【发布时间】: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 是真的。
感谢您的支持
【问题讨论】:
-
需要注册那个 PermissionServiceProvder 吗??
标签: laravel