johnny1991 2017-04-13 15:20:37 4976次浏览 3条回复 6 4 1

权限设置 公司角色:销售,项目经理,人事,老板 公司成员:小销是销售,小项是项目经理,小李是人事,老雷是老板 系统里面有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到此就结束了,是不是很简单呢?

觉得很赞
您需要登录后才可以回复。登录 | 立即注册