Laravel资源,检查特定用户

时间:2014-01-17 14:49:56

标签: php controller laravel laravel-4

我正在使用ressource控制器,可以像这样编辑用户:users / edit / 8(8是id)。

如何检查只有用户8可以编辑他的帐户?

因为其他用户可以在网址中设置任何ID并编辑任何帐户。

我可以使用:

if (!Auth::user()->id === $id) { 
   //throw exception ... 
}

但这不是laravel的重点“不要重复自己”。

我是否应该将ressource控制器用于与用户相关的内容(如帐户设置等)? 或者只是管理相关的东西?

1 个答案:

答案 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