某些型号只能由其所有者编辑/删除:
$model->user_id
这是我应该如何检查用户是否拥有模型(在每个需要它的控制器操作中?):
if ($model->user_id == Auth::user()->id)
在每个需要此检查的Controller Action中添加这个似乎是多余的?我正在寻找一个优雅的DRY解决方案(过滤器?基于角色的权限?)
非常感谢你。
答案 0 :(得分:1)
如果您希望用户在自己的帖子上进行编辑,这可能是有意义的。
在帖子模型中,创建此功能:
public function isTheOwner($user)
{
return $this->user_id === $user->id;
}
接下来,在 PostController
中 public function getEdit($id)
{
// 1st # Fetch the post with something like this:
$post = $this->post->findOrFail($id); // maybe this will not work for you, try to implement your own method here
// 2nd # Here is how you do the trick
// validate that the user updating the post is the post author:
if ( ! $post->isTheOwner(Auth::user())) return \Redirect::to('/');
// 3rd # Return the view with the post array
}
答案 1 :(得分:0)
更新回答
使用表单请求类授权方法。
public function authorize()
{
$commentId = $this->route('comment');
return Comment::where('id', $commentId)
->where('user_id', Auth::id())->exists();
}
文档:https://laravel.com/docs/5.0/validation#form-request-validation
教程:https://laracasts.com/series/laravel-from-scratch-2017/episodes/28
答案 2 :(得分:-1)
是的,过滤器可以很好地解决。
只需检入过滤器,该模型的作者是否与经过身份验证的用户相同。如果没有,那就拒绝它。