如何在Laravel中实现'用户只能编辑自己的帖子/模型'

时间:2014-03-18 10:10:45

标签: laravel permissions roles

某些型号只能由其所有者编辑/删除:

$model->user_id

这是我应该如何检查用户是否拥有模型(在每个需要它的控制器操作中?):

if ($model->user_id == Auth::user()->id)

在每个需要此检查的Controller Action中添加这个似乎是多余的?我正在寻找一个优雅的DRY解决方案(过滤器?基于角色的权限?)

非常感谢你。

3 个答案:

答案 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)

是的,过滤器可以很好地解决。

只需检入过滤器,该模型的作者是否与经过身份验证的用户相同。如果没有,那就拒绝它。