rbac最简单实现方案 [ 技术分享 ]
权限设置 公司角色:销售,项目经理,人事,老板 公司成员:小销是销售,小项是项目经理,小李是人事,老雷是老板 系统里面有menu:客户管理,项目管理,人事管理 需求描述:销售可以访问客户管理,项目经理可以访问项目管理,人事可以访问人事管理,老板都可以访问 实现过程: 第一步:生成rbac相关的表(mysql为例) drop table if exists auth_assignment; drop table if exists auth_item_child; drop table if exists auth_item; drop table if exists auth_rule;
create table auth_rule ( name varchar(64) not null, data text, created_at integer, updated_at integer,
primary key (name) ) engine InnoDB;
create table auth_item ( name varchar(64) not null, type integer not null, description text, rule_name varchar(64), data text, created_at integer, updated_at integer, primary key (name), foreign key (rule_name) references auth_rule (name) on delete set null on update cascade, key type (type) ) engine InnoDB;
create table auth_item_child ( parent varchar(64) not null, child varchar(64) not null, primary key (parent, child), foreign key (parent) references auth_item (name) on delete cascade on update cascade, foreign key (child) references auth_item (name) on delete cascade on update cascade ) engine InnoDB;
create table auth_assignment ( item_name varchar(64) not null, user_id varchar(64) not null, created_at integer, primary key (item_name, user_id), foreign key (item_name) references auth_item (name) on delete cascade on update cascade ) engine InnoDB;
第二步:配置authManager的组件 'authManager' => [
'class' => 'yii\rbac\PhpManager', ], 第三步:生成角色 $authManager = Yii::$app->authManager; $ceo = $authManager->createRole('ceo'); $authManager->add($ceo);
$humanresource = $authManager->createRole('humanresource'); $authManager->add($humanresource);
$projectmanager = $authManager->createRole('projectmanager'); $authManager->add($projectmanager);
$sales = $authManager->createRole('sales'); $authManager->add($sales);
// 并且建立好等级关系,ceo是sales,projectmanager,humanresource的上司 $authManager->addChild($ceo, $sales); $authManager->addChild($ceo, $projectmanager); $authManager->addChild($ceo, $humanresource);
第三步:建立相关权限 $auth = Yii::$app->authManager; $HumanResourceMenu = $auth->createPermission('HumanResourceMenu'); $auth->add($HumanResourceMenu);
$customerMenu = $auth->createPermission('customerMenu'); $auth->add($customerMenu);
$projectManagerMenu = $auth->createPermission('projectManagerMenu'); $auth->add($projectManagerMenu);
第四步:将相关的权限分配给相关的角色
$authManager->addChild($sales, $customerMenu); $authManager->addChild($projectmanager, $projectManagerMenu); $authManager->addChild($humanresource, $HumanResourceMenu);
到此为止,rbac的权限已经完全配置好了,剩下的事情就是给每个人分配相关的角色即可了 第五部:每个人分配相关的角色 将小销分配一个sales角色,小项分配一个projectmanager的角色,小李分配一个humanresource的角色,老雷分配一个ceo的角色 $authManager->assign($ceo,$userId); // 老雷的userId, $authManager->assign($humanresource,$userId); // 小李的userId, ...以此类推
rbac权限系统已经构建完成,剩下的事情就是使用了 第六步:使用rbac <?php if(Yii::$app->getUser->can('customerMenu')):?> 客户管理 <?php endif;?> <?php if(Yii::$app->getUser->can('projectManagerMenu')):?> 项目管理 <?php endif;?> <?php if(Yii::$app->getUser->can('HumanResourceMenu')):?> 人事管理 <?php endif;?>
rbac到此就结束了,是不是很简单呢?
共 3 条回复
-
johnny1991 回复于 2017-04-16 11:19 举报
修正一下第二步
'authManager' => [
'class' => 'yii\rbac\DbManager',
],共 1 条回复 -
johnnyNIcolas 回复于 2017-04-27 23:50 举报
谢谢,不错,学习了
johnny1991
最后登录:2024-03-05
在线时长:81小时27分
- 粉丝26
- 金钱3285
- 威望580
- 积分9895