`
dcj3sjt126com
  • 浏览: 1872373 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

YII学习第二十三天,accessRules用法

    博客分类:
  • YII
阅读更多

访问控制过滤器(Access Control Filter)
访问控制过滤器是检查当前用户是否能执行访问的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::checkAccess returns true for one of the roles.提示,用户角色应该被设置成allow规则,因为角色代表能做某些事情。


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


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


expression: 设定一个PHP表达式。

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

 

 

 

 

 

 

访问规则中:
expression: 设定一个PHP表达式。它的值用来表明这条规则是否适用。在表达式,你可以使用一个叫$user的变量,它代表的是Yii::app()->user。
expression的具体用法:
class AdminController extends CController
{
  ……
    public function accessRules()
    {
        return array(
        array('allow',  //允许所有人执行'login','error','index'
                'actions'=>array('login','error','index'),
                'users'=>array('*'),
        ),
        array('allow', //允许超级管理员执行所有动作
                'actions'=>array('create','update','delete'),
                'expression'=>array($this,'isSuperAdmin'),
        ),
        array('allow',//允许普通管理员执行
                'actions'=>array('update'),
                'expression'=>array($this,'isNormalAdmin'),    //表示调用$this(即AdminController)中的isNormalAdmin方法。
        ),      
        array('deny',  // deny all users
                'users'=>array('*'),
        ),
        );
    }

 

    //判断是否是超级管理员
    protected function isSuperAdmin($user)   //其中$user代表Yii::app()->user即登录用户。
    {
        return ($this->loadModel($user->id)->adminAdminFlag==1);
    }

 

    //判断是否是普通管理员
    protected function isNormalAdmin($user)    //其中$user代表Yii::app()->user即登录用户。
    {
        return ($this->loadModel($user->id)->adminAdminFlag==0);
    }

 

    public function loadModel($id)
    {
        $model=Admin::model()->findByPk((int)$id);
        if($model===null){
            throw new CHttpException(404,'页面不存在');     
        }
        return $model;
    }
}

 

 

注:其中$user代表Yii::app()->user即登录用户。

分享到:
评论
1 楼 D.Z 2014-07-16  
very helpful...

相关推荐

    Yii2.0中文学习手册

    - **Composer文档**:深入学习Composer的使用方法。 - **Composer中文文档**:中文版的Composer文档,有助于国内用户更好地理解。 通过上述步骤,用户可以顺利地安装和设置Yii2.0框架,为进一步的学习和开发奠定...

    Yii2—yii2学习—某课网学习笔记

    yii2学习笔记,一边看某课网一遍实践一遍总结,整理文档

    Yii CModel中rules验证规格

    Yii的CModel中rules方法中各項參數的說明(僅限於yii1)

    Yii框架学习笔记

    Yii框架是高效且灵活的PHP框架,专为Web 2.0应用开发而设计。自2008年1月薛强开始开发以来,Yii已经经历了多个版本迭代,从1.0.0到...通过深入学习和实践,开发者可以充分利用Yii的优势,提高开发效率和应用质量。

    Yii框架学习手册

    Yii Yii框架 Yii框架快速入门,自己整理的很全的,很容易看懂

    Yii2.0学习笔记完全版

    Yii2.0学习笔记完全版 Yii2 Yii2.0 Yii2.0学习 Yii2.0学习笔记

    Yii框架学习笔记.pdf

    Yii框架是一种基于PHP的开源Web应用开发框架,广泛用于构建现代Web应用。...通过这些知识点的学习,开发者可以深入理解Yii框架的工作原理和使用方法,从而在实际开发中更高效地运用Yii框架构建Web应用。

    yii框架yii框架yii框架yii框架yii框架

    很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架很好用yii框架

    yii框架中文手册教程和YII模板

    本教程将深入探讨Yii框架的核心概念和使用方法,同时提供一份中文手册教程,以便于中文使用者更好地理解和应用。 首先,Yii框架的核心特性包括MVC(模型-视图-控制器)设计模式、Active Record ORM(对象关系映射)...

    yii2初学者

    Yii2是Yii的最新主要版本,它继承并改进了Yii1的一些特性,并且以模块化、安全性、可扩展性、灵活性和重用性著称。Yii2框架特别适合于初学者,因为它的易学易用,以及其提供了一个全面的文档,让初学者可以通过学习...

    yii框架中文文档、yii中文手册教程

    13. **拓展和插件**:如何创建和使用第三方扩展,增强框架功能。 通过这些文档,开发者可以深入理解Yii框架的机制,并学会如何有效地利用它来构建强大的Web应用。同时,Yii社区活跃,有许多优秀的教程和示例代码供...

    yii2数据缓存 学习笔记

    yii 学习笔记,其中包括数据缓存、缓存组件、缓存过期、缓存依赖的理解及yii2数据缓存的测试代码

    yii的小部件使用

    通过对Yii框架中小部件的使用以及利用gii工具快速生成增删改查功能的学习,我们可以看到,通过合理利用这些工具和技术,可以极大地提高Web应用的开发效率。特别是在处理常见的CRUD操作时,利用gii工具自动生成代码...

    YII学习笔记

    YII设计的目标是提高开发效率,提供优秀的性能,以及易于学习和使用。它采用MVC(Model-View-Controller)架构模式,强调代码的重用性和可扩展性。框架的核心特性包括缓存管理、数据库支持、安全特性、表单验证、...

    Yii 2文件下载

    从标签"Yii 2.0"我们可以确认,这个压缩包的内容与Yii框架的第二个主要版本有关。 压缩包子文件的文件名称列表只给出了一项:"yii2-2.0.0",这很可能是指Yii 2.0的第一个稳定版本。通常,这个版本会包含框架的核心...

    Yii2.0视频教程

    - **扩展**:扩展是指第三方提供的额外功能包,可以轻松地为Yii应用添加新功能。 - 扩展安装:通过Composer安装所需的扩展包。 - 使用扩展:在项目中启用扩展,并按照文档说明进行配置。 #### 七、调试与日志 - ...

    Yii权威指南思维导图

    综上所述,"Yii权威指南思维导图"是学习和掌握Yii框架不可或缺的辅助工具,它将复杂的框架结构和功能用简洁明了的图表展现出来,极大地提升了学习效率。通过仔细研究这个思维导图,开发者可以更深入地理解Yii的每一...

    yii框架中文手册教程

    8. 社区支持:Yii拥有活跃的社区和大量的第三方扩展,开发者可以通过社区获得帮助和丰富的插件资源。 安装Yii框架的过程相对简单,通常包括以下步骤: 1. 从官方网站下载Yii框架压缩包。 2. 将压缩包解压至Web...

Global site tag (gtag.js) - Google Analytics