`
touya
  • 浏览: 75718 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Yii中使用RBAC完全指南

阅读更多
转载自:http://imdong.net/view/469.html/comment-page-1
写得不错,因为Yii的文档还缺少一些实际的例子,所以不是那么容易看懂,看了这篇就完全搞清楚了!

九月 10, 2009 - Posted by 东至
写在前面

    * 我的feed地址已经修改为: http://feeds.imdong.net ,请更新您的阅读器。
    * 以下内容适合Yii 1.0.x,其他版本可能有略微的差别。
    * 根据您的评论和反馈,本文会不断进行修改和补充,以方便新学习者。

开始准备

Yii提供了强大的配置机制和很多现成的类库。在Yii中使用RBAC是很简单的,完全不需要再写RBAC代码。所以准备工作就是,打开编辑器,跟我来。
设置参数、建立数据库

在配置数组中,增加以下内容:
‘components‘ => array(
    //……
    ‘authManager‘=>array(
            ‘class‘=>‘CDbAuthManager‘,//认证类名称
            ‘defaultRoles‘=>array(‘guest‘),//默认角色
            ‘itemTable‘ => ‘pre_auth_item‘,//认证项表名称
            ‘itemChildTable‘ => ‘pre_auth_item_child‘,//认证项父子关系
            ‘assignmentTable‘ => ‘pre_auth_assignment‘,//认证项赋权关系
        ),
   //……

那这三个数据表怎么建立呢?很简单,去看framework/web/auth/schema.sql。注意要和你的自定义的表名称对应起来。比如SQL文件中的AuthItem你要修改为pre_auth_item。然后在数据库中运行这个SQL文件中的语句。
了解概念

你可能要问,剩下的代码呢?我告诉你,没有啦。RBAC系统就这样建立起来了。但是为了使用它,你需要了解它的运行机制。我会尽量讲的啰嗦一点……(官方的RBAC文档在这里,但是我曾经看了4-5遍才明白。)
三个概念

你需要了解的是,授权项目可分为operations(行动),tasks(任务)和 roles(角色)。

一个用户拥有一个或者多个角色,比如,我们这里有三个角色:银行行长、银行职员、顾客。我们假设:

    * 张行长 有角色:银行行长、银行职员、顾客(人家自己可以存钱嘛)。
    * 王职员 有角色:银行职员、顾客。
    * 小李 有角色:顾客。

那么,相应的,只要顾客可以做的事情,小李就可以做,王职员和张行长也可以。银行职员可以做的事情,王职员和张行长都可以做,小李就不可以了。

比如,一个“顾客”可以存钱,那么拥有“顾客”角色的张行长、王职员、小李都可以存钱。“银行职员”可以打印顾客的交易记录,那么有“银行职员”角色的张行长和王职员都可以,而小李不行,必须找一个有“银行职员”角色的人才可以打印详细的交易记录。一个“银行行长”才可以进入银行钱库提钱,那么只有张行长可以,因为它才有“银行行长”的角色。

这就是基于角色的认证体系,简称RBAC。
角色的继承

角色是可以继承的,比如我们规定如下:

    * 凡是“银行行长”都是“银行职员”,也就是说,只要银行职员可以做的事情,银行行长都可以做。
    * 凡是“银行职员”都是顾客,同上,顾客可以做的事情银行职员也可以做。

那么角色关系就变成了:

    * 张行长 有角色:银行行长。
    * 王职员 有角色:银行职员。
    * 小李 有角色:顾客。

这样更简单了,这就是角色的继承。
任务的继承

一个任务(task)是可以包含另外一个任务的,我们举个例子,比如“进入银行”。

我们设定“顾客”这个角色有“进入银行”的权限。也就是说,“顾客”可以执行“进入银行”的任务。接下来,我们假设“进入柜台”是进入银行的父权限,也就是说,“进入柜台”包含“进入银行”。只要能“进入柜台”的人都可以“进入银行”。我们把“进入柜台”这个任务权限给“银行职员”。

那么从角色上来说,王职员可以进入银行,因为王职员的角色是“银行职员”,而“银行职员”包含了“顾客”的角色。那么“顾客”可以进行的“任务”对于“银行职员”来说也是可以进行的。而“顾客”可以“进入银行”,那么王职员也可以“进入银行”。这是角色的继承带来的。

我们再假设有个赵领导,是上级领导,可以进入柜台进行视察。那么,我们的任务关系是:

    * 赵领导 有任务:进入柜台。

那么,赵领导就可以“进入银行”。因为“进入银行”是被“进入柜台”包含的任务。只要可以执行“进入柜台”的人都可以执行“进入银行”。这就是任务的继承。
关于行动

行动是不可划分的一级。也就是说。而一个行动是不能包含其他行动的。假设我们有个行动叫“从银行仓库中提钱”。我们把这个行动作包含“进入柜台”。那么只要可以执行“从银行仓库中提钱”的角色都可以执行“进入柜台”这个任务。
三者关系

    * 一个角色可以包含另外一个或者几个角色。
    * 一个角色可以包含另外一个或者几个任务。
    * 一个角色可以包含另外一个或者几个行动。
    *
    * 一个任务可以包含另外一个或者几个任务。
    * 一个任务可以包含另外一个或者几个行动。
    *
    * 一个行动只能被角色或者任务包含,行动是不可以包含其他,也不可再分。

这样,就形成了一个权限管理体系。关于“任务”和“行动”,你不必思考其字面上的意义。这两者就是形成两层权限。
进行赋权

我们建立了RBAC权限管理,就需要进行对权限的WEB管理。这些就需要你自己写代码了。

根据不同种类的项目调用下列方法之一定义授权项目:

    * CAuthManager::createRole
    * CAuthManager::createTask
    * CAuthManager::createOperation

一旦我们拥有一套授权项目,我们可以调用以下方法建立授权项目关系:

    * CAuthManager::addItemChild
    * CAuthManager::removeItemChild
    * CAuthItem::addChild
    * CAuthItem::removeChild

最后,我们调用下列方法来分配角色项目给各个用户:

    * CAuthManager::assign
    * CAuthManager::revoke

下面我们将展示一个例子是关于用所提供的API建立一个授权等级:

    $auth=Yii::app()->authManager;

    $auth->createOperation('createPost','create a post');
    $auth->createOperation('readPost','read a post');
    $auth->createOperation('updatePost','update a post');
    $auth->createOperation('deletePost','delete a post');

    $bizRule='return Yii::app()->user->id==$params["post"]->authID;';
    $task=$auth->createTask('updateOwnPost','update a post by author himself',$bizRule);
    $task->addChild('updatePost');

    $role=$auth->createRole('reader');
    $role->addChild('readPost');

    $role=$auth->createRole('author');
    $role->addChild('reader');
    $role->addChild('createPost');
    $role->addChild('updateOwnPost');

    $role=$auth->createRole('editor');
    $role->addChild('reader');
    $role->addChild('updatePost');

    $role=$auth->createRole('admin');
    $role->addChild('editor');
    $role->addChild('author');
    $role->addChild('deletePost');

    $auth->assign('reader','readerA');
    $auth->assign('author','authorB');
    $auth->assign('editor','editorC');
    $auth->assign('admin','adminD');



也就是说,你需要自己写一个管理界面,来列出你的角色、任务、行动,然后可以在这个界面上进行管理。比如增加、删除、修改。

权限检查

假设你在你的管理界面进行了赋权,那么可以在程序里面进行权限检查:

if(  Yii::app()->user->checkAccess('createPost')  )

{

    // 这里可以显示表单等操作

} else {

    // 检查没有通过的可以跳转或者显示警告

}



上面的代码就检查了用户是否可以执行“createPost”,这createPost可能是一个任务,也可以是一个行动。



其他的

对于很多说Yii权限体系RBAC不好用的人其实都没有看懂文档。综合我的体验,我感觉Yii框架的RBAC是我用过的框架里面最好用的。而且是需要自己写代码最少的。

Yii的RBAC有更加高级的用法,比如“业务规则”,“默认角色”。你可以去参考官方文档。

我知道,会有部分人仍旧不理解RBAC,或者不会用Yii的RBAC。没有关系,你可以在下方的评论框里提问。

happy Yii !
分享到:
评论
1 楼 weijieyan 2010-09-12  
  $bizRule='return Yii::app()->user->id==$params["post"]->authID;'; 是嘛意思,没看懂

相关推荐

    浅析Yii中使用RBAC的完全指南(用户角色权限控制)

    在Yii框架中实现RBAC功能,首先需要设置RBAC相关的配置参数,并建立相应的数据库表结构。Yii使用CDbAuthManager作为认证管理器,它依赖于三个数据表来存储权限信息:授权项表(pre_auth_item)、授权项父子关系表...

    yii framework 中文完全手册

    这个“yii framework 中文完全手册”提供了详尽的指南,帮助开发者理解和利用Yii的强大功能。在深入探讨之前,我们先简单介绍一下Yii框架的基本概念。 Yii,发音为"易",寓意“简易”,是一个快速、安全且专业的...

    yii2.0中文完全手册

    这个“yii2.0中文完全手册”提供了全面的指南,帮助开发者深入理解和有效地利用该框架。 一、Yii 2.0 基础概念 Yii 2.0 的核心理念是组件驱动,它将应用程序拆分为可重用的组件,使得代码更易于维护和扩展。框架...

    yii2-db-rbac:在YII2中动态控制访问权限

    在Yii2中创建访问控制而不更改代码的最简单方法。 该模块允许通过UI为Yii角色库访问(RBAC)创建角色和规则。 它还允许通过UI为用户分配角色和规则。 通过模块规则检查访问的行为。 整合方式 内容管理系统 模块 ...

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

    在提供的“yii权威指南”中,你将找到关于Yii框架全面而深入的介绍,包括如何安装和配置环境,创建项目,理解框架的基本概念,以及如何利用其特性进行开发。这是一份非常有价值的参考文档,无论你是初学者还是有经验...

    yii2中文手册-官方.pdf

    Yii2中文手册是一个为中文用户提供 Yii2 使用指南的权威文档。 ### Yii2框架基础知识点 1. **安装Yii2**: 文档提供了从基础开始的安装步骤,指导用户如何搭建Yii2开发环境。包括下载框架、配置服务器环境、创建...

    PHP-Yii2中文手册.rar

    这个压缩包包含的文件“PHP-Yii2中文手册.pdf”很可能是一个详细的教程或者指南,覆盖了Yii2框架的各个方面,从基础概念到高级特性,帮助开发者快速理解和掌握框架的使用。 在Yii2框架中,Model代表业务数据和业务...

    yii2.0基础高级应用程序模板

    - Yii 2.0 官方文档:提供详细的框架指南和API参考,是学习和解决问题的重要资料。 - 社区论坛和教程:Yii 有活跃的社区,提供各种教程和问题解答,有助于深入理解和应用。 了解这些知识点后,你可以根据项目需求...

    Yii2中文手册(完整版)

    这个“Yii2中文手册(完整版)”提供了全面的指南,帮助开发者深入理解和熟练掌握Yii2框架的各项功能和最佳实践。 手册首先介绍了Yii2的基础概念,包括安装步骤、目录结构以及基本的配置方法。Yii2 使用Composer进行...

    yii2-webadmin.rar

    6. **README.md**:这是一个 Markdown 格式的文件,通常包含项目简介、安装指南、使用方法等信息,帮助用户了解和使用项目。 7. **src**:这个目录很可能包含了项目的主要源代码,如控制器(controllers)、模型...

    yii框架中文版手册pdf和chm格式

    - **Yii Extension**:丰富的扩展库,如RBAC(角色基础访问控制)、支付插件、邮件发送等,可直接集成到项目中。 - **社区支持**:Yii拥有活跃的开发者社区,提供问答、教程和示例代码,有助于学习和解决问题。 6...

    Yii的开发说明(中文版)

    "Yii-blog的开发说明.doc"可能包含了一个使用Yii框架构建博客应用的详细指南。可能的内容包括: 1. 创建项目结构:讲解如何初始化一个Yii项目,包括设置基本的目录结构。 2. 数据库设计:可能涉及博客文章、用户、...

    Yii2最新手册中文完整版.zip

    这个"Yii2最新手册中文完整版.zip"包含了一份详尽的指南,旨在帮助开发者深入了解和高效使用Yii2框架。以下是对这份手册内容的详细解读: 1. **安装与配置**: - **安装**: 手册会引导读者通过Composer进行安装,...

    yii-docs-2.0-zh-cn.tar.gz

    同时,它还提供了英文版本的离线HTML文档以及"yii-guide-2.0-zh-cn"官方中文指南的PDF版本,这对于深入理解和学习Yii 2.0框架至关重要。 Yii 2.0 的核心特性包括: 1. **快速性能**:通过缓存机制、优化的查询构建...

    Packt RAW Yii 1.1 Application Development Cookbook 2011

    《Packt RAW Yii 1.1 Application Development Cookbook 2011》是一本非常实用的Yii框架开发指南,它不仅详细介绍了Yii框架的核心特性和使用技巧,还提供了大量的实际案例供读者参考。对于希望学习和掌握Yii框架的...

    yii-docs-2.0-en.tar.gz

    1. **入门指南**:介绍如何安装Yii,创建第一个应用,以及基本的Web开发流程。 2. **类参考**:详尽的API文档,列出框架中的所有类、接口、 traits 及其方法,是开发者查找函数用法的重要资源。 3. **教程**:涵盖了...

    应用Yii1.1和PHP5进行敏捷Web开发

    《应用Yii1.1和PHP5进行敏捷Web开发》不仅是一本技术手册,更是深入理解Yii框架设计理念与实践应用的指南。通过本书的学习,开发者可以全面掌握Yii框架的使用技巧,充分利用其易用性、高效性和可扩展性,构建出高...

    (完整版)Yii.1.1.Application.Development.Cookbook.Aug.2011

    内容覆盖了Yii框架的基础概念到高级特性,为开发者提供了一个全面且实用的指南。 #### 三、关键知识点 1. **Yii框架简介**: - Yii是一个高性能的PHP Web应用开发框架,它支持敏捷开发方法,能够显著提高Web应用...

    yii-commentator:Yii评论模块

    - **权限控制**:结合Yii的RBAC(Role-Based Access Control)权限管理,可以设定不同用户角色的评论权限。 - **API接口**:模块可能提供RESTful API,允许外部应用或服务与评论系统交互,实现更多功能扩展。 ### 5...

Global site tag (gtag.js) - Google Analytics