【问题标题】:Laravel 5.1 protecting routes with ownership using middlewareLaravel 5.1 使用中间件保护具有所有权的路由
【发布时间】:2016-01-08 07:42:06
【问题描述】:

我正在尝试学习 Laravel,但不太了解如何以最佳方式完成我的任务。

场景,

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

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

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

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

【问题讨论】:

    标签: php laravel laravel-5.1 middleware


    【解决方案1】:

    Laravel Eloquent 为你提供Query Scopes,这可能就是你要找的。​​p>

    你的模特:

    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();
    

    【讨论】:

    • 是的,这就是我想要的。但是,这样做,我仍然需要为每个模型这样做吗?有没有更动态的方式来做到这一点?所以我可以指定模型名称并访问我需要的东西?你理解我的问题,我只是觉得奇怪的是,这种常见的事情“很难”完成。
    猜你喜欢
    • 2018-09-25
    • 2023-03-28
    • 2016-02-11
    • 2015-12-17
    • 2015-08-12
    • 2021-09-28
    • 2013-03-27
    • 2016-04-13
    • 2019-12-04
    相关资源
    最近更新 更多