如何在 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 中实现“用户只能编辑自己的帖子/模型”的主要内容,如果未能解决你的问题,请参考以下文章