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

Posted

技术标签:

【中文标题】如何在 Laravel 中实现“用户只能编辑自己的帖子/模型”【英文标题】:How to implement 'user can only edit his own post/model' in Laravel 【发布时间】:2014-04-23 22:36:45 【问题描述】:

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

$model->user_id

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

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

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

非常感谢。

【问题讨论】:

【参考方案1】:

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

只需检查过滤器,如果该模型的作者等于经过身份验证的用户。如果不是,则拒绝它。

【讨论】:

【参考方案2】:

如果您希望用户仅编辑他们自己的帖子,则可以这样做。

在您的 Post 模型中,创建此函数:

  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

  

【讨论】:

【参考方案3】:

更新答案

使用表单请求类授权方法。

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

【讨论】:

以上是关于如何在 Laravel 中实现“用户只能编辑自己的帖子/模型”的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 在网站中实现 OCR

如何在 Laravel 网站中实现主题选项?

如何在 laravel 5.1 中实现“记住我”?

如何在 Laravel 关系中实现 SUM()?

如何在 laravel 中实现这个查询?

如何在 Laravel 中实现管理面板和客户面板