网站中有些页面是允许直接访问的,有些页面是只有在登录以后才可以访问,这就要进行访问控制,yii可以很方便的实现访问控制。

先看一下yii的处理流程:

yii用户访问控制_用户

在走到控制器找相应的方法的时候,会有一个filters,这就是进行访问过滤,用户访问就是在这里面实现的。那么具体的是怎么实现的呢?

1.在控制器里里面定义一个过滤器(写在所有方法的前面):

yii用户访问控制_用户_02

2.紧接着写相应的过滤的规则:

yii用户访问控制_用户_03

这样简单的访问控制就可以了。

3.修改拒绝访问的额跳转页面:

在直接访问就绝的页面的时候,会跳转到登录页面,但是跳转的是默认的登录页面site/login,修改配置文件指定跳转到想要跳转的登录页面:

yii用户访问控制_用户_04

注意:如果访问自定义的登录页面出现无法访问(报错死循环类似问题),如果登录页面是使用的后台的登录页面,访问控制没有做处理的情况易出现这种情况,只要处理访问控制就好了!

这样,在直接登录被拒绝访问的页面时,就会跳转到定义的登录页面了!


补充:

还可以用+-号灵活配置访问控制,如:

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方法外,其他的都会起作用