我正在关注Laravel大门的教程,其中允许具有“update-post”权限的用户编辑数据库中的任何帖子。此外,任何用户都可以编辑他们提交的帖子。
应用程序/提供者/ AuthServiceProvider.php:
Gate::define('update-post', function ($user, \App\Post $post) {
return $user->hasAccess(['update-post']) or $user->id == $post->user_id;
});
路由/ 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',只允许拥有该权限的用户编辑自己的帖子。
因此,例如,主持人将拥有允许他们编辑所有帖子的权限'update-post'。如果普通用户被分配了新的权限“update-own-post”,而不是当前实施的每个用户,则他们只能编辑自己的帖子。
在我的代码中实现此更改的最佳方法是什么?
答案 0 :(得分:0)
在Gate中,您要检查用户的类型,因此如果满足以下条件之一,他们应该能够进行编辑:
button.heightAnchor.constraint(equalTo: (button.imageView?.heightAnchor)!, multiplier: 1, constant: 5).isActive = true
button.widthAnchor.constraint(equalTo: (button.imageView?.widthAnchor)!, multiplier: 1, constant: 70).isActive = true
$user->hasAccess(['update-post'])
$user->id == $post->user_id
我不知道您的用户类型是如何设置的,但我建议您在用户模型中添加一种检查用户类型的方法,以及用户类型是否为'主持人&# 39;或者你选择的任何名字,它应该返回true。
你会留下类似的东西:
$user->isModerator()
编辑 - 从评论中回答
根据你的评论你可以像这样完成它,这里是清理过的代码:
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']);
});
是否符合条件。如果第一个块为真,则第二个块甚至不会被执行;但是,如果第一个块不是真的,那么它将检查第二个块是否为真。