网站中有些页面是允许直接访问的,有些页面是只有在登录以后才可以访问,这就要进行访问控制,yii可以很方便的实现访问控制。
先看一下yii的处理流程:
在走到控制器找相应的方法的时候,会有一个filters,这就是进行访问过滤,用户访问就是在这里面实现的。那么具体的是怎么实现的呢?
1.在控制器里里面定义一个过滤器(写在所有方法的前面):
2.紧接着写相应的过滤的规则:
这样简单的访问控制就可以了。
3.修改拒绝访问的额跳转页面:
在直接访问就绝的页面的时候,会跳转到登录页面,但是跳转的是默认的登录页面site/login,修改配置文件指定跳转到想要跳转的登录页面:
注意:如果访问自定义的登录页面出现无法访问(报错死循环类似问题),如果登录页面是使用的后台的登录页面,访问控制没有做处理的情况易出现这种情况,只要处理访问控制就好了!
这样,在直接登录被拒绝访问的页面时,就会跳转到定义的登录页面了!
补充:
还可以用+-号灵活配置访问控制,如:
function filter(){
return array(){
'accessControl',
}
}
function accessRule(){
return array(){
array(
'deny',
'users'=>array('*'), //用户如果登陆系统以后,会提示决绝访问,如果没有登陆的话 跳转到登陆的界面
),
}
}
如果将控制器做以下改动:
‘acessControl+f1’ 其他的内容不发生改变,其中f1,f2是方法
那么下面定制的规则只是对方法f1产生作用,对其他的方法并不产生作用
同理:‘acessControl+f1,f2’将对f1和f2产生作用
再次改动:
'acessControl-f1' 过滤器除了f1方法外,其他的都会起作用