`

YII RBAC

    博客分类:
  • Yii
 
阅读更多

自带的不带管理功能,直接用的是srbac

 

1.下载extension

http://www.yiiframework.com/extension/srbac/

 

2.解压到module目录下

 

3.编辑main.config如下:

a.modules

 

	'modules'=>array(
		// uncomment the following to enable the Gii tool
		
		'gii'=>array(
			'class'=>'system.gii.GiiModule',
			'password'=>'123456',
		 	// If removed, Gii defaults to localhost only. Edit carefully to taste.
			'ipFilters'=>array('127.0.0.1','::1'),
		),
        
        'Admin'=>array(
            'class'=>'application.modules.admin.AdminModule',
        ),
        
        'srbac' => array(
            'userclass'=>'User', //default: User
            'userid'=>'user_id', //default: userid
            'username'=>'username', //default:username
            'delimeter'=>'@', //default:-
            'debug'=>true, //default :false
            'pageSize'=>10, // default : 15
            'superUser' =>'Authority', //default: Authorizer
            'css'=>'srbac.css', //default: srbac.css
            'layout'=>
            'application.views.layouts.main', //default: application.views.layouts.main,
            //must be an existing alias
            'notAuthorizedView'=> 'srbac.views.authitem.unauthorized', // default:
            //srbac.views.authitem.unauthorized, must be an existing alias
            'alwaysAllowed'=>array( //default: array()
            'SiteLogin','SiteLogout','SiteIndex','SiteAdmin',
            'SiteError', 'SiteContact'),
            'userActions'=>array('Show','View','List'), //default: array()
            'listBoxNumberOfLines' => 15, //default : 10 'imagesPath' => 'srbac.images', // default: srbac.images 'imagesPack'=>'noia', //default: noia 'iconText'=>true, // default : false 'header'=>'srbac.views.authitem.header', //default : srbac.views.authitem.header,
            //must be an existing alias 'footer'=>'srbac.views.authitem.footer', //default: srbac.views.authitem.footer,
            //must be an existing alias 'showHeader'=>true, // default: false 'showFooter'=>true, // default: false
            'alwaysAllowedPath'=>'srbac.components', // default: srbac.components
            // must be an existing alias ) 
        ),       
		
	),

 b.import

 

	'import'=>array(
		'application.models.*',
		'application.components.*',
        'application.modules.srbac.controllers.SBaseController',
	),

 c.components

 

	// application components
	'components'=>array(
		'user'=>array(
			// enable cookie-based authentication
			'allowAutoLogin'=>true,
	        //'loginUrl'=>array('auth/login')
		),
        
        //SRBAC
        
        'authManager' => array(  
            'class'=>'srbac.components.SDbAuthManager',
            // The database component used
            'connectionID'=>'db',
            // The itemTable name (default:authitem)
            'itemTable'=>'authitem',
            // The assignmentTable name (default:authassignment)
            'assignmentTable'=>'authassignment',
            // The itemChildTable name (default:authitemchild)
            'itemChildTable'=>'authitemchild',
        ),

 

4.然后通过 http://gm.me/snsplus_intranet/index.php?r=srbac/authitem来访问,会建立三张表,然后开始配置就可

 

 

 

RBAC即为role-based access control,它要解决的问题就是“谁能做什么”,分析此句,两大因素,人物(谁),动作(做什么)。

 

人物,在RBAC里分为两层,一层叫user,一层叫role。

张三是user,他可能同时拥有多个role,比如“注册用户”,“版主”,“帖子创建者”等。

user好解释,表中的某行就意味着一个user。

但角色,是由一个业务规则,或是说一个逻辑来指定的。比如“注册用户”的逻辑是“!Yii::app()->user->isGuest”,“版主”的逻辑是“in_array(Yii::app()->user->id, $board->owner_ids)”,“帖子创建者”的逻辑就是“Yii::app()->user->id == $post->user_id”。

如果这个逻辑判断为真,那么当前用户就属于这个角色。

 

动作,这也分两层。一层叫operation,一层叫task。

operation,是指一个原子操作。

而一个task可能包括了多个operation。

举个例子来说,“管理帖子”这个task就包括了“创建帖子”、“删除帖子”,“修改帖子”、“查看帖子”、“帖子列表”这四个operation。而“查看帖子”可能只包括了“查看帖子”、“帖子列表”这两个operation。

 

要执行权限检查,我们首先需要知道授权项目的名字。 例如,要检查当前用户是否可以创建帖子,我们需要检查他是否拥有 createPost 所表示的权限。 然后我们调用 CWebUser::checkAccess 执行权限检查:

 

if(Yii::app()->user->checkAccess('createPost'))
{
    // 创建帖子
}

 

如果授权规则关联了一条需要额外参数的业务规则,我们也可以传递给它。例如,要检查一个用户是否可以更新帖子, 我们可以通过 $params 传递帖子的数据:

 

$params=array('post'=>$post);
if(Yii::app()->user->checkAccess('updateOwnPost',$params))
{
    // 更新帖子
}

 

 

许多 Web 程序需要一些可以分配给系统中所有或大多数用户的比较特殊的角色。 例如,我们可能想要分配一些权限给所有已通过身份验证的用户。如果我们特意指定并存储这些角色分配,就会引起很多维护上的麻烦。 我们可以利用 默认角色 解决这个问题。

默认角色就是一个隐式分配给每个用户的角色,这些用户包括通过身份验证的用户和游客。 我们不需要显式地将其分配给一个用户。 当 CWebUser::checkAccess 被调用时,将会首先检查默认的角色,就像它已经被分配给这个用户一样。

默认角色必须定义在 CAuthManager::defaultRoles 属性中。 例如,下面的配置声明了两个角色为默认角色:authenticatedguest

 

return array(
    'components'=>array(
        'authManager'=>array(
            'class'=>'CDbAuthManager',
            'defaultRoles'=>array('authenticated', 'guest'),
        ),
    ),
);

 

由于默认角色会被分配给每个用户,它通常需要关联一个业务规则以确定角色是否真的要应用到用户。 例如,下面的代码定义了两个角色, authenticatedguest,很高效地分别应用到了已通过身份验证的用户和游客用户。

 

$bizRule='return !Yii::app()->user->isGuest;';
$auth->createRole('authenticated', 'authenticated user', $bizRule);
 
$bizRule='return Yii::app()->user->isGuest;';
$auth->createRole('guest', 'guest user', $bizRule);
 

关于rbac的一个实例:

/config/main.php

 

'authManager' => array(  
            //'class'=>'application.modules.srbac.components.SDbAuthManager',
            'class'=>'CDbAuthManager',
            // The database component used
            'connectionID'=>'db',
            // The itemTable name (default:authitem)
            'itemTable'=>'authitem',
            // The assignmentTable name (default:authassignment)
            'assignmentTable'=>'authassignment',
            // The itemChildTable name (default:authitemchild)
            'itemChildTable'=>'authitemchild',
        ), 

 

site控制器的initauth

 

    public function actionInitauth(){
        $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');
        //此处的$params是以后要验证的时候checkAccess传进来的参数
        //比如,如果我是帖子的作者,我当前登录的uid是1,那么下面就赋予uid 1 作者这个角色,这样我就可以修改我自己的帖子
        $bizRule='return Yii::app()->user->id==$params["post_uid"];';
        
        $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',1);
        //赋予uid1为author角色
        $auth->assign('author','1');
        $auth->assign('editor','3');
        $auth->assign('admin','12');   
    }
 

 

初始化之后,然后如果你要验证权限updateOwnPost,其实这个权限既可以是task,亦可以是operation

 

        $params = array('post_uid' => 1);
        $result = Yii::app()->user->checkAccess('updateOwnPost', $params);
        //此处的假如我知道发布帖子的这个人的uid是1,真实情况下需要做一次查询,这样就会根据之前设置权限的时候的bizRule做复杂一点的自定义校验
/* 
$bizRule='return Yii::app()->user->id==$params["post_uid"];';
 $task=$auth->createTask('updateOwnPost','update a post by author himself',$bizRule);
 */    

这样的话返回的结果就是true
 

 

 

 

 

 

 

分享到:
评论
1 楼 Dreamingo63 2014-08-13  
 

相关推荐

    Yii Rbac 资源包

    Yii 框架中的 Role-Based Access Control(RBAC)是一种强大的权限管理机制,它允许开发者在应用程序中精细地控制用户访问权限。这个“Yii Rbac 资源包”包含了数据库脚本、代码示例和其他相关文件,旨在帮助开发者...

    yii Rbac 实践详解

    学习yii Rbac自己总结的经验!因为找过相关资料,很头疼,所以自己总结出来,共大家分享!!

    yii2 rbac yii2 rest RBAC Auth manager for-yii2-rest-rbac.zip

    标题 "yii2 rbac yii2 rest RBAC Auth manager for-yii2-rest-rbac.zip" 提到的主要是关于在 Yii2 框架下,针对 RESTful API 的 RBAC 管理器的实现。这个压缩包很可能包含了一个预配置的 RBAC 解决方案,用于帮助...

    yii2 rbac yii2 rest RBAC Auth manager for-yii-rest-admin.zip

    标题 "yii2 rbac yii2 rest RBAC Auth manager for-yii-rest-admin" 暗示了这是一个关于在 Yii2 中实现 RESTful API 的 RBAC 管理器,特别是为 "yii-rest-admin" 这个项目设计的。这个压缩包可能包含了实现这一功能...

    yii框架 rbac扩展

    RBAC(Role-Based Access Control,基于角色的访问控制)是 Yii 框架中一个重要的权限管理组件,用于实现复杂的权限分配和访问控制。在Yii框架1.1版本中,RBAC扩展提供了一套完善的机制,允许开发者轻松管理用户的...

    Yii 添加Srbac模块安装配置详细教程

    在工作中整理出的yii RBAC中Srbac的详细安装步骤,附截图。

    yii2-rbac-cached:为 yii2 RBAC 缓存

    yii2-rbac-缓存 为 yii2 RBAC 缓存 安装 安装此扩展的首选方法是通过 。 要么跑 php composer.phar require "letyii/yii2-rbac-cached" "dev-master" 或添加 " letyii/yii2-rbac-cached " : " dev-master " 到...

    Yii2 RBAC 集成了用户管理模块和自写的权限管理模块,前端页面采用H+框架。-Yii2-Rbac.zip

    2. **Yii2 的RBAC组件**:Yii2内置了`yii\rbac\DbManager`,它使用数据库来存储RBAC数据。这个组件允许动态地创建、分配和管理角色、任务和权限。 3. **创建RBAC结构**:使用`yii\rbac\ManagerInterface`提供的方法...

    yii框架rbac权限管理.zip

    yii框架rbac权限管理

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

    在Yii2中,RBAC可以通过yii\rbac组件来实现。这个组件支持创建角色、任务、规则,并将它们关联起来。用户可以被分配到角色,角色则拥有特定的权限。Yii2的RBAC系统允许动态调整权限,比如在运行时添加或删除用户的...

    Yii2 rbac权限控制之rule教程详解

    Yii2 RBAC,即基于角色的访问控制(Role-Based Access Control),是Yii2框架中用于实现权限管理的一种机制。通过RBAC,可以简化复杂权限系统的构建过程,使得权限管理更加直观和易于管理。 在Yii2的RBAC权限控制中...

    yii2-rbac-migration:用于 RBAC 迁移的 Yii2 扩展

    用于 RBAC 迁移的 Yii 2 扩展 安装 在composer.json添加: { "require": { "rmrevin/yii2-rbac-migration": "1.1.*" } } 用法 创建新的迁移扩展 \rmrevin\yii\rbac\RbacMigration 并作为正常迁移执行 <? //...

    yii-rest-admin:yii2 rbac yii2 rest RBAC Auth manager for Yii2 RESTful(YII2权限管理rbac--rest接口方式)

    Yii-rest-rbac 后台RBAC配置写在前面本篇只讲述如何使用Yii-rest-rbac进行 restful API认证和权限管理,关于原理,请移步(目前未完成)下载安装 composer require clement/yii-rest-rbacor ...rbac 创建数据表使用@...

    yii-rbac:yii框架rbac权限管理

    yii-rbac yii框架rbac权限管理 1.basic_admin_user 表中手动建立一个系统管理员账户,id为1(必需为1)。 2.登录用户时把用户的id存到$_SESSION['admin_uid']中。 3.后台登陆链接 账号:admin 密码:admin 4.在rbac/...

    Yii2 rbac权限控制操作步骤实例教程

    Yii2框架的RBAC(Role-Based Access Control)权限控制系统是一种强大的访问控制机制,它允许开发者定义角色、权限和任务,以便更精细地管理用户访问权限。本文将详细讲解如何在Yii2中进行RBAC的权限控制操作步骤。 ...

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

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

    Yii2-Rbac:Yii2 RBAC 集成了用户管理模块和自写的权限管理模块,前端页面采用H+框架

    Yii2+Yii2 RBAC 集成了用户管理模块和自写的权限管理模块,前端页面采用H+框架。#安装使用Git clone到本地后,新建数据库,将yii2advanced.sql文件导入数据库,修改common/config/main-local.php 配置文件数据库信息...

    内置有Rbac权限的YII2框架源码

    1. **安装和配置**:首先,你需要在项目中安装`yii2-rbac`扩展,通过Composer执行`composer require yiisoft/yii2-rbac`。然后,在配置文件中启用Rbac组件,如`config/web.php`中的`'components' => ['authManager' ...

    Yii2 rbac权限控制之菜单menu实例教程

    以上便是Yii2 rbac权限控制之菜单menu实例教程所涉及的主要知识点,它不仅涉及了RBAC的基本概念和操作,还涉及了如何在实际的Web应用开发中将RBAC与菜单权限控制结合起来,实现安全的、权限分明的菜单显示逻辑。...

    yii2-cached-rbac-dbmanager:yii2 RBAC 的缓存 DBManager

    yii2 RBAC 的缓存 DBManager 允许缓存 yii\rbac\DbManager 中的权限警告Yii2 现在支持 yii\rbac\DbManager 的本地缓存。 见安装安装此扩展的首选方法是通过 。 要么跑 ...

Global site tag (gtag.js) - Google Analytics