我是Laravel的新手并且想知道会是什么;是阻止用户编辑彼此数据的最佳做法。
我知道我可以使用过滤器和Auth来处理用户页面,例如
Route::filter('auth', function($route)
{
$id = $route->getParameter('id');
if( Auth::check() && Auth::user()->id != $id) {
return Redirect::route('forbidden');
}
});
但是我想知道关系页面是什么(例如/ user_profile / 14,user_settings / 22等)。我是否已为这些[组]路由中的每一个定义过滤器并检查id与该关系? e.g。
Route::filter('auth.user_settings', function($route)
{
$id = $route->getParameter('id');
if( Auth::check() && Auth::user()->user_settings->id != $id) {
return Redirect::route('forbidden');
});
Route::filter('auth.user_profile', function($route)
{
$id = $route->getParameter('id');
if( Auth::check() && Auth::user()->profile->id != $id) {
return Redirect::route('forbidden');
});
...etc
还是有更好的方法吗?
答案 0 :(得分:1)
我猜测你的路线可能是这样的:
Route::get('user_profile/{id}', function()
如果这是您为用户定义路线的方式,您可能希望将其更改为:
Route::get('user_profile', function()
然后在请求时,控制器将使用诸如 Profile :: findOrFail(Auth :: user() - > id)之类的内容从当前经过身份验证的用户加载适当的配置文件/设置在这种情况下,您不必担心用户签出其他个人资料,您只需要路由的'auth'过滤器组。