Laravel 5.1使用中间件保护拥有所有权的路由

时间:2015-10-10 12:11:22

标签: php laravel laravel-5.1 middleware

我正在努力学习Laravel,但我并不完全明白如何以最佳方式完成任务。

情景中,

用户(user_id 5)可以创建todo列表,id为3(todo_id 3)。他们每个人都生活在自己的模型中,因此用户模型和todo模型。我目前正在检查是否通过将其传递给方法来创建待办事项,

public function show($id)
{
    TodoList::where('id',$id)->where('user_id', auth::id())->firstOrFail();
    return 'ok';
}

所以,我认为可以使用中间件过滤所有这些。我有更多需要相同操作的模型,因此用户2无法更改/编辑用户5等的todo_list。这需要附加到所有方法,以阻止其访问。显示,查看,删除等。

有没有办法做到这一点,所以我不必为每个模型创建一个新的中间件?

1 个答案:

答案 0 :(得分:0)

Laravel Eloquent为您提供Query Scopes,这可能是您正在寻找的。

你的模特:

class TodoList extends Model {
    public function scopeFiltered($query, $id, $user_id)
    {
        return $query->where('id',$id)->where('user_id', $user_id);
    }
}

通话:

TodoList::filtered($id, Auth::user()->id)
   ->get();