我使用的是laravel 4,这是我的AdminController文件:
class AdminController extends BaseController {
protected $layout = "admin.layout";
public function __construct() {
// security for the forms and access
$this->beforeFilter('csrf', array('on'=>'post'));
$this->beforeFilter('auth.admin' , array('except' =>array('getIndex','postSignin')));
// using this one to display user value if login and is admin
if (Auth::check() && Auth::user()->isAdmin()){
$this->user = Auth::getUser();
View::share('user', $this->user);
}
}
// main admin page
public function getIndex(){
$this->layout->content = View::make('admin.login');
}
// get the dashboard page
public function getDashboard() {
$this->layout->content = View::make('admin.dashboard');
}
// missing pages all redirect to dashboard if user is logged in.
public function missingMethod($parameters = array()){
if (Auth::check() && Auth::user()->isAdmin())
$this->getDashboard();
else
$this->getIndex();
}
这是我的filters.php文件:
Route::filter('auth.admin', function()
{
if(!Auth::check() && !(Auth::user()->isAdmin())){
return Redirect::guest('admin');
}
});
在我的routes.php文件中,我正在执行以下操作:
Route::controller('admin', 'AdminController');
如果你能帮我的话,我想要的是:_
1) 。我想清理我的代码,那里没有太多的检查用户是否已登录和isAdmin。
2) 。现在,如果你登录并转到"admin/",它会向你显示登录页面?我怎样才能有效地修复它。
3) 。同样,如果你没有登录,你转到"管理/仪表板",它会向你显示仪表板内容吗?如何修复
提前感谢您的帮助:)
您可以使用路由组并使用单个过滤器来验证它们
检查文档
http://laravel.com/docs/routing#route-组
将其添加到routes.php
文件中:
Route::group(array('before' => 'auth.admin'), function() {
Route::controller('admin', 'AdminController');
})
在filters.php
文件中声明过滤器:
Route::filter('auth.admin', function(){
// Assumed you have a '/login' url
if (Auth::guest() || (Auth::check() && !Auth::user()->isAdmin())) {
return Redirect::guest('login');
}
});
此外,请确保您正在使用的User
模型中有user()->isAdmin()
方法,它会检查用户是否是admin
,并返回Boolean
值,如果用户是管理员,则返回TRUE
,否则返回FALSE
。