`

YII的访问控制

    博客分类:
  • Yii
 
阅读更多

在Yii为Model生成的Controller中,有一个accessRules()方法,用来限制谁可以做什么。这是涉及一个web应用的安全性的重要部分。比如有些删除和更新操作只能由管理员来完成,普通用户没有操作的权限等等,这些都需要通过accessRules()来设置。

  这是Yii默认生成的代码:

public function accessRules()
{
    return array(
        array('allow',  // allow all users to perform 'list' and 'show' actions
            'actions'=>array('list','show'),
            'users'=>array('*'),
        ),
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions'=>array('create','update'),
            'users'=>array('@'),
        ),
        array('allow', // allow admin user to perform 'admin' and 'delete' actions
            'actions'=>array('admin','delete'),
            'users'=>array('admin'),
        ),
        array('deny',  // deny all users
            'users'=>array('*'),
        ),
    );
}

 在前三个规则中,其中*表示所有user,@表示已登录的user,admin是管理员的name,如果管理员有多个,你可以简单地将名字硬编码进去,就像:

array('allow', // allow harold and maude user to perform 'admin' and 'delete' actions
    'actions'=>array('admin','delete'),
    'users'=>array('harold','maude'),
),

 但这样就过于static了,一般用户信息肯定都是存在数据库里,所以这里的规则必须得跟数据库挂钩才行,如何实现呢?我们可以在后面加上一句表达式,比如:

array('allow',
    'actions'=>array('publish'),
    'users'=>array('@'),
    'expression'=>'isset($user->role) && ($user->role==="editor")'
),

 

只有expression里的表达式为true时规则才能通过,于是这条规则的含义就是将“publish”操作的权限限制在已经登录的并且role为editor的用户中。

  Note:$user->role的值必须在用户登录的时候就被赋予,这个过程在身份验证时实现。

  

  还有一种情况就是某个用户只能修改或删除自己创建的内容。比如一个用户创建了某个事件,该用户的ID便与这个事件记录相关联,EventController中修改和删除的操作只能在当前登录用户的ID与事件的ownerId相同时才能被执行。因为accessRules()中的规则必须在加载某个特定的Model前就要被判定,而这种情况下必须要通过加载Model并获取Model中的数据来判断,所以此规则不能在accessRules()中设定。下面有个方法能解决这个问题:

public function actionDelete()
{
    $event = $this->loadEvents(); // Fetch the specific event Model.
    // Can only delete the events they created:
    if ($event->ownerId == Yii::app()->user->id) {
        $event->delete();
    } else {
        throw new CHttpException(403,'Invalid request. You are not allowed to delete this event.');
    }
}
 

 

 

 

 

分享到:
评论

相关推荐

    Yii2使用驼峰命名的形式访问控制器(实例讲解)

    yii2在使用的时候,访问控制器的时候,如果控制器的名称是驼峰命名法,那访问的url中要改成横线的形式。例如: public function actionRoomUpdate() { // } //访问的时候就要www.test.com/room-update这样访问 最近...

    yii1.1.10 开发包(包含yii权威指南以及yii博客例子讲解)

    5. **身份认证和授权**:Yii 内置了RBAC(角色基础的访问控制)系统,方便开发者管理用户权限,实现灵活的访问控制策略。 6. **I18N(国际化)与L10N(本地化)**:Yii 支持多语言应用,通过翻译资源文件轻松实现...

    Yii 2文件下载

    1. **yiisoft/yii2**: 框架的核心组件,包括MVC(模型-视图-控制器)架构、数据库访问层、缓存机制、身份验证和授权等。 2. **Composer配置文件**:用于管理依赖和自动加载类库。 3. **基础应用模板**:提供一个基本...

    基于Yii2+layui的后台框架模板,实现了完善的RBAC权限控制-yii2-admin-theme.zip

    RBAC(Role-Based Access Control)是一种常见的访问控制机制,通过角色来管理用户权限,简化了权限分配的复杂性。 在Yii2中,RBAC可以通过yii\rbac组件来实现。这个组件支持创建角色、任务、规则,并将它们关联...

    yii-1.0.4.r920

    它还支持用户认证和授权机制,如访问控制过滤器(Access Control Filter)。 7. 表单和验证:Yii 提供了方便的表单处理和数据验证工具,可以快速创建和验证用户输入,减少错误和安全风险。 8. 视图助手:Yii 视图...

    yii-1.1.8.r3324

    5. **用户认证与授权**:Yii 内置了用户认证和权限管理,支持基于角色的访问控制(RBAC),方便实现用户权限管理。 6. **易用性**:Yii 提供了丰富的生成工具(Gii),可以自动生成模型、控制器、表单、CRUD(创建...

    YII srbac_1.3

    - **可扩展性**:支持自定义规则,可以根据业务需求添加复杂的访问控制逻辑。 - **版本更新**:`1.3beta` 表示这是该插件的一个测试版本,可能包含一些新功能和改进,同时也可能存在一些已知问题。 4. **安装与...

    yii1.1中文手册

    4. **权限控制**:Yii的RBAC(基于角色的访问控制)系统允许开发者定义角色、任务和规则,为不同用户提供不同的访问权限。 5. **URL管理**:Yii的URL管理器允许开发者自定义URL格式,使URL更易于理解和搜索引擎优化...

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

    4. **数据库访问**:介绍ActiveRecord模式,用于简化数据库操作,以及查询构建器的使用。 5. **URL管理**:如何定制和管理应用程序的URL模式。 6. **视图和布局**:视图的创建,以及如何使用布局来统一页面样式。 7....

    yii新闻系统源码

    Yii框架内置了角色基础访问控制(Role-Based Access Control, RBAC),可以方便地实现用户权限管理,例如管理员可以发布、编辑和删除新闻,而普通用户只能查看。 5. **缓存机制** 对于新闻系统这种数据更新频繁但...

    yii框架下的yii_blog 博客系统

    首先,Yii框架的核心特性包括MVC(Model-View-Controller)设计模式、主动记录(ActiveRecord)模式、缓存管理、身份验证和访问控制、URL管理等。这些特性使得开发过程结构清晰,易于维护。 1. **MVC模式**:Yii的...

    Yii教案素材整理

    对于Composer安装,新手需要访问Composer官方网站下载composer.phar文件,并将其放置在合适的目录下(如/usr/bin),然后使用命令行工具进行Yii框架的项目创建。由于Yii2要求最低PHP版本为5.4,因此在安装前需要确保...

    Yii框架快速入门

    它还有用户认证和授权机制,如基于角色的访问控制(RBAC),帮助你实现权限管理。 八、缓存 Yii支持多种缓存策略,包括文件缓存、数据库缓存、APC、Memcached和Redis等。这些缓存机制可以极大地提高应用的响应速度...

    YII框架中文手册

    2. **Authentication与Authorization**:Yii提供了用户认证和授权机制,包括身份验证、角色基础访问控制(RBAC)等,确保应用的安全性。 3. **Form处理**:Yii提供了表单建模和验证功能,简化了表单数据的接收和...

    yii项目源代码

    此外,Yii提供了缓存管理、用户认证和权限控制、表单验证、安全防护等功能,使得开发过程更加安全和高效。 在"Yii视频课程源码+课件"中,你可以找到一个完整的项目实例,这将帮助你从实际操作的角度去学习Yii。源...

    yii2医疗实例

    1. **用户认证与授权**:Yii2提供了强大的身份验证和权限控制机制,如RBAC(角色基础访问控制)。在医疗系统中,这可以确保不同级别的医生、护士和患者只能访问他们被授权的数据。 2. **数据库操作**:Yii2的Active...

    yii1.1版本资料整理

    2. 前端控制器Application:在Yii1.1中,前端控制器用于解析用户指令,接收请求,并将其分发给合适的控制器进行处理,作为请求处理流程的环境。 3. 系统基类命名约定:Yii的命名约定中,所有的系统基类都以"C"开头,...

    新下载的yii2,yii framework

    7. **web**:Web应用的入口点,包含`index.php`,它是Web服务器直接访问的文件,用于启动Yii2框架。 Yii2还提供了一些核心特性,例如: - **Gii**: 一个代码生成工具,可以帮助快速生成模型、控制器、CRUD操作等...

    yii的小部件使用

    gii是Yii框架提供的一个强大的代码生成器工具,它可以自动生成各种类型的代码,包括模型类、控制器、视图文件以及完整的CRUD(Create, Read, Update, Delete)操作。接下来,我们将详细介绍如何使用gii工具为商品...

Global site tag (gtag.js) - Google Analytics