在我们的程序中,后台页面一般需要做登录验证,yii中有自带的方法,在这里,简单说三种,第一种需要配合系统登陆机制,后面两种不需要,第一种和第二种可以结合使用,具体操作看自己,实现的方法很多
1. 比如后台的controller是Admincontroller,则在里面加上如下代码:
public function filters() {
return array(
'accessControl',
);
}
public function accessRules() {
return array(
array('deny',
'actions' => array('list'),
'users' => array('?')
),
);
}
上面代码的意思是list页面必须登录,否则就跳转到登录页面,'users' => array('?')表示匿名用户,deny是禁止的意思,还有allow及其他,具体的看手册,这里就不多说了,由于用的是系统自带的filterAccessControl,所以需用系统自带的登录机制(下次将做简单说明),注意:yii默认登录页面是site/login,如果需要修改则在config的main文件中配置
//设置默认登录地址
'user' => array(
// enable cookie-based authentication
'allowAutoLogin' => true,
'loginUrl'=>array(‘admin/login'),
)
这样页面就会跳转到admin/login,这样就可以实现简单的登录验证,。
2.还可以通过下面代码来实现,假设我们是通过cookie保存登录信息
public function filterCheckLogin($filterChain) {
$cookie = Yii::app()->getRequest()->getCookies();
if (!$cookie['userid']) {
$this->redirect(Yii::app()->createUrl('/admin/login'));
return;
}
$filterChain->run();
}
public function filters() {
return array(
'checkLogin -login',
);
}
这段代码的意思是login这个方法不需要经过filtercheckLogin验证,其他的方法都会先进入到filterCheckLogin这个方法里,进行验证,如果cookie存在即用户已经登陆则继续执行,否则直接跳转到登录页面,这段代码的好处是不需要用系统自带的登录机制,比较简单一点。
3.如果不想用以上方法,还可以在run中进行判断,我们知道,在进入action之前会执行run($actionid),所以我们可以重写run方法,在run方法中进行登陆验证,这个也比较自由,不需要使用系统登陆机制,在AdminController类里面加上如下方法:
public function run($id) {
$actions = array('login','forgetpwd');
$cookie = Yii::app()->request->getCookies();
if (!in_array($id, $actions) && empty($cookie['userid'])) {
$this->redirect('/admin/login');
} else {
parent::run($id);
}
}
$id其实就是当前action的名字,也就是方法名,先把不需要登陆的页面的action放到数组里,再判断当前的action是否属于不需要登陆的action,如果不是并且没有登录则跳转到登录页面,否则继续执行。
好了,就简单的写了下,希望对初学者有帮助。错漏之处请指正。