【发布时间】:2015-05-23 04:29:52
【问题描述】:
我是Laravel 的新手,有一个小问题。
我想实现只有帖子的创建者/所有者才能编辑/查看/删除它。
每个帖子属于一个用户,每个用户可以有多个帖子(一对多关系)。这部分就像一个魅力。
更具体地说,如果调用这些路由之一:
GET mydomain.com/posts/{id} (show)
GET mydomain.com/posts/{id}/edit (edit)
PUT mydomain.com/posts/{id} (update)
DELETE mydomain.com/posts/{id} (destroy)
应用程序应检查当前已通过身份验证的用户的 id 是否与帖子 user_id 字段匹配。
据我所知,这对于中间件是不可能的,因为中间件无法访问当前的 Post-Object,我无法将参数传递给它。
目前我能够通过过滤器实现我的目标(我使用 Route-Model 绑定)。
Route::filter('isOwnerOfPost', function() {
if(Route::input('posts')->user_id !== \Auth::id()) {
abort(403);
};
});
Route::get('posts', 'PostController@index');
Route::group(['before' => 'isOwnerOfPost'], function(){
Route::resource('posts', 'PostController', ['except' => ['index', 'create', 'store']]);
});
但这个解决方案对我来说似乎有点混乱。我必须为每个模型创建一个新过滤器,并且我不能使用资源丰富的路由(至少不是完全)。
有没有更好的方法来完成这样的行为?
【问题讨论】:
-
绝对应该检查this answer。它拥有完整的相关中间件开发和解释。
标签: php authentication filter laravel-5 middleware