Ste*_*teB 3 php before-filter laravel-4
我已经在控制器中使用Route :: Intended('/')将标准auth过滤器添加到多个路由(假设登录成功).
filters.php:
Route::filter('auth', function(){
if (Auth::guest()) return Redirect::guest('internal/login');
});
Run Code Online (Sandbox Code Playgroud)
控制器:
if (Auth::attempt($data, false))
{
return Redirect::intended('/');
}
Run Code Online (Sandbox Code Playgroud)
如何创建检查特定权限的自定义身份验证过滤器(在本例中为isAdmin)?
我已经使auth.admin过滤器与标准auth过滤器相同,以重定向到登录页面,但我是否需要在我的控制器上使用第二个Login方法,或者有办法告诉哪个过滤器(如果有的话)调用了控制器方法?
if (Auth::attempt($data, false))
{
if (RouteHasAdminFilter())
{
if (!Auth::User()->Admin)
return Redirect::intended('/');
else
return Redirect::to('/');
}
else
{
return Redirect::intended('/');
}
}
Run Code Online (Sandbox Code Playgroud)
感谢@diegofelix让我走上正轨.
我设法编写了一个过滤器:
Route::filter('admin', function()
{
if (Auth::guest()) return Redirect::guest('internal/login');
if (Auth::check())
{
if (!Auth::User()->Admin)
return Redirect::to('/');
}
else
return Redirect::to('/');
});
Run Code Online (Sandbox Code Playgroud)
此过滤器不需要更改我的控制器上的Login方法,该方法仍然使用Redirect :: intention('/').
关键是不要重定向管理员用户,只需让代码"落到"原始页面,只有非管理员用户被重定向.
我还在使用标准的"auth"过滤器来处理需要非管理员身份验证的页面.
我的路线使用:
'before' => 'auth'
'before' => 'admin'
Run Code Online (Sandbox Code Playgroud)
如果我删除了我的管理过滤器的第一行(我从标准的auth过滤器中复制过),我可以通过同时使用两个过滤器来获得相同的效果:
'before' => 'auth|admin'
Run Code Online (Sandbox Code Playgroud)