Laravel 用户更新自己的权限 post
Laravel user permission to update own post
我正在学习有关 Laravel 门的教程,其中允许具有 'update-post' 权限的用户编辑数据库中的任何 post。此外,任何用户无论权限如何都可以编辑他们提交的 post。
app/Providers/AuthServiceProvider.php:
Gate::define('update-post', function ($user, \App\Post $post) {
return $user->hasAccess(['update-post']) or $user->id == $post->user_id;
});
routes/web.php:
Route::get('/edit/{post}', 'PostController@edit')
->name('edit_post')
->middleware('can:update-post,post');
Route::post('/edit/{post}', 'PostController@update')
->name('update_post')
->middleware('can:update-post,post');
我正在寻找一种添加新权限的方法,比如 'update-own-post',只有拥有该权限的用户才可以编辑他们自己的 post。
因此,例如,版主将拥有允许他们编辑所有 post 的权限 'update-post'。如果为普通用户分配了新权限 'update-own-post',普通用户将只能编辑他们自己的 post,但不是当前实施的每个用户。
在我的代码中实施此更改的最佳方法是什么?
您要在 Gate 中检查用户类型,因此如果满足以下任一条件,他们应该能够进行编辑:
$user->hasAccess(['update-post'])
$user->id == $post->user_id
$user->isModerator()
我不知道您是如何设置用户类型的,但我建议您在用户模型中添加一个方法来检查用户类型,如果用户类型是 'moderator' 或无论您选择什么名称,它都应该 return 正确。
你会得到类似的东西:
Gate::define('update-post', function ($user, \App\Post $post) {
return $user->hasAccess(['update-post']) || $user->id == $post->user_id || $user->isModerator();
});
编辑 -- 来自评论的回答
根据您的评论,您可以像这样完成它,这是清理后的代码:
Gate::define('update-post', function ($user, \App\Post $post) {
return ($user->id == $post->user_id && $user->hasAccess(['update-own-post'])) || $user->hasAccess(['update-post']);
});
之所以可行,是因为您正在检查 {first condition} OR {second condition}
是否符合条件。如果第一个块为真,则第二个块甚至不会执行;但是,如果第一个块不正确,它将检查第二个块是否为真。
我正在学习有关 Laravel 门的教程,其中允许具有 'update-post' 权限的用户编辑数据库中的任何 post。此外,任何用户无论权限如何都可以编辑他们提交的 post。
app/Providers/AuthServiceProvider.php:
Gate::define('update-post', function ($user, \App\Post $post) {
return $user->hasAccess(['update-post']) or $user->id == $post->user_id;
});
routes/web.php:
Route::get('/edit/{post}', 'PostController@edit')
->name('edit_post')
->middleware('can:update-post,post');
Route::post('/edit/{post}', 'PostController@update')
->name('update_post')
->middleware('can:update-post,post');
我正在寻找一种添加新权限的方法,比如 'update-own-post',只有拥有该权限的用户才可以编辑他们自己的 post。
因此,例如,版主将拥有允许他们编辑所有 post 的权限 'update-post'。如果为普通用户分配了新权限 'update-own-post',普通用户将只能编辑他们自己的 post,但不是当前实施的每个用户。
在我的代码中实施此更改的最佳方法是什么?
您要在 Gate 中检查用户类型,因此如果满足以下任一条件,他们应该能够进行编辑:
$user->hasAccess(['update-post'])
$user->id == $post->user_id
$user->isModerator()
我不知道您是如何设置用户类型的,但我建议您在用户模型中添加一个方法来检查用户类型,如果用户类型是 'moderator' 或无论您选择什么名称,它都应该 return 正确。
你会得到类似的东西:
Gate::define('update-post', function ($user, \App\Post $post) {
return $user->hasAccess(['update-post']) || $user->id == $post->user_id || $user->isModerator();
});
编辑 -- 来自评论的回答
根据您的评论,您可以像这样完成它,这是清理后的代码:
Gate::define('update-post', function ($user, \App\Post $post) {
return ($user->id == $post->user_id && $user->hasAccess(['update-own-post'])) || $user->hasAccess(['update-post']);
});
之所以可行,是因为您正在检查 {first condition} OR {second condition}
是否符合条件。如果第一个块为真,则第二个块甚至不会执行;但是,如果第一个块不正确,它将检查第二个块是否为真。