我正在使用ressource控制器,可以像这样编辑用户:users / edit / 8(8是id)。
如何检查只有用户8可以编辑他的帐户?
因为其他用户可以在网址中设置任何ID并编辑任何帐户。
我可以使用:
if (!Auth::user()->id === $id) {
//throw exception ...
}
但这不是laravel的重点“不要重复自己”。
我是否应该将ressource控制器用于与用户相关的内容(如帐户设置等)? 或者只是管理相关的东西?
答案 0 :(得分:1)
不应该是$id
?:
if (!Auth::user()->id === $id) {
// still throw exception? Which one?
}
如果您不希望用户能够访问特定路线'users.edit',则需要创建过滤后的路线:
Route::get('users/edit/{id}', array(
'as' => 'users.edit',
'before' => 'auth|checkUser',
'uses' => 'UserController@edit'
)
);
Route::filter('checkUser', function($route, $request, $value)
{
if (! Auth::use()->id === $route->parameter('id'))
{
return Redirect::to('operation-not-permitted-route');
}
});
当您使用RESTful控制器时,应在Route::controller()
命令之前添加此路由。
这是一种方式。另一种方法是为您的配置文件创建一个新的控制器,并为该控制器创建特定的路由和过滤器。
关于使用RESTful和Resourceful路线,我总是想指出Phil Sturgeon的这篇文章:http://philsturgeon.co.uk/blog/2013/07/beware-the-route-to-evil。