博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php修改模块布局,yii 修改模块使用的布局文件
阅读量:6621 次
发布时间:2019-06-25

本文共 1634 字,大约阅读时间需要 5 分钟。

访问控制过滤器是检查当前用户是否能执行访问的 controller  action的初步授权模式。这种授权模式基于用户名,客户IP地址和访问类型。访问控制过滤器适用于简单的验证。需要复杂的访问控制,需要使用将要讲解 到的基于角色访问控制(role-based access (RBAC)).

在控制器(controller)里重载CController::filters方法设置访问过滤器来控制访问动作(看 Filter 了解更多过滤器设置信息)。

class PostController extends CController

{

......

public function filters()

{

return array(

'accessControl',

);

}

}

在上面,设置的access control过滤器将应用于PostController里每个动作。过滤器具体的授权规则通过重载控制器的CController::accessRules方法来指定。

class PostController extends CController

{

......

public function accessRules()

{

return array(

array('deny',

'actions'=>array('create', 'edit'),

'users'=>array('?'),

),

array('allow',

'actions'=>array('delete'),

'roles'=>array('admin'),

),

array('deny',

'actions'=>array('delete'),

'users'=>array('*'),

),

);

}

}

上面设定了三个规则,每个用个数组表示。数组的第一个元素不是'allow'就是'deny',其他的是名-值成对形式设置规则参数的。上面的规则这样理解:create和edit动作不能被匿名执行;delete动作可以被admin角色的用户执行;delete动作不能被任何人执行。

访问规则是一个一个按照设定的顺序一个一个来执行判断的。和当前判断模式(例如:用户名、角色、客户端IP、地址)相匹配的第一条规则决定授权的结果。如果这个规则是allow,则动作可执行;如果是deny,不能执行;如果没有规则匹配,动作可以执行。

为了确保某类动作在没允许情况下不被执行,设置一个匹配所有人的deny规则在最后,类似如下:

return array(

// ... 别的规则...

// 以下匹配所有人规则拒绝'delete'动作

array('deny',

'action'=>'delete',

),

);

因为如果没有设置规则匹配动作,动作缺省会被执行。

访问规则通过如下的上下文参数设置:

actions: 设置哪个动作匹配此规则。

users: 设置哪个用户匹配此规则。此当前用户的name被用来匹配. 三种设定字符在这里可以用:

*: 任何用户,包括匿名和验证通过的用户。

?: 匿名用户。

@: 验证通过的用户。

roles: 设定哪个角色匹配此规则。这里用到了将在后面描述的role-based access control技术。In particular, the rule is applied if CWebUser::checkAccessreturns true for one of the roles.提示,用户角色应该被设置成allow规则,因为角色代表能做某些事情。

ips: 设定哪个客户端IP匹配此规则。

verbs: 设定哪种请求类型(例如:GET, POST)匹配此规则。

expression: 设定一个PHP表达式。它的值用来表明这条规则是否适用。在表达式,你可以使用一个叫$user的变量,它代表的是Yii::app()->user。

转载地址:http://jbcpo.baihongyu.com/

你可能感兴趣的文章
配置级别greenplum 可用空间计算
查看>>
聚集索引更新后会不会马上重新排序
查看>>
幸运大抽奖
查看>>
消除人声的方法
查看>>
Post请求
查看>>
labview 中activex的初步使用方法
查看>>
Jquery 操作Html 控件 CheckBox、Radio、Select 控件
查看>>
JSP与JavaBeans
查看>>
解决Android中TextView首行缩进的问题
查看>>
oracle 查询哪些表分区
查看>>
SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)
查看>>
Ubuntu启动sshd服务
查看>>
Java排序算法(三):直接插入排序
查看>>
推断图片格式
查看>>
JVM知识
查看>>
Python 列表 min() 方法
查看>>
C语言中 Float 数据结构的存储计算
查看>>
Linux系统监控命令详解
查看>>
HSF源码阅读
查看>>
1.Flask URL和视图
查看>>