一、前言
上一篇文章我们已经大致谈过RBAC到底是什么和yii2底层RBAC接口的分析。
下面我深入理解一下RBAC权限分配,深入理解下yii2底层RBAC扩展,以及它是如何针对模块化系统的开发的?
二、介绍
2.1 下面是张大致的思维导图:
由图可见,我们对yiiRABC底层接口的扩展逻辑。
2.2 下面是数据表具体流程图:
我们扩展了四个数据表格:auth_module、auth_role、auth_role_item、auth_role_child。
2.3下面是引入的数据表结构:
auth_module表结构
Id primary key | name(模块、功能名称) varchar(255) | route(路由) varchar(255) | pid smallint(6) | create_at bigint | update_at bigint | status(是否已添加权限、角色) smallint(6) 1已添加 2未添加 |
1 | 营运管理 | fake/one (伪路由) | 0 | 1555645646546 | 1555645646546 | 1 |
2 | 验卡管理 | check-card/index | 1 | 1555645646546 | 1555645646546 | 1 |
3 | 商品管理 | shop/index | 1 | 1555645646546 | 1555645646546 | 1 |
4 | 验卡 | check-card/check | 2 | 1555645646546 | 1555645646546 | 1 |
5 | 验卡 | check-card/check-card-number | 2 | 1555645646546 | 1555645646546 | 2 |
auth_role_child表结构
id primary key | user_id(用户ID) bigint unique | role_id(高级角色ID) bigint | create_at bigint | update_at bigint |
1 | 22 | 2 | 1555645646546 | 1555645646546 |
2 | 25 | 3 | 1555645646546 | 1555645646546 |
3 | 12 | 1 | 1555645646546 | 1555645646546 |
4 | 55 | 3 | 1555645646546 | 1555645646546 |
5 | 23 | 4 | 1555645646546 | 1555645646546 |
auth_role_item表结构
role_id(高级角色ID) bigint primary key 联合主键 | auth_item(低级角色) varchar(255) primary key联合主键 | create_at bigint | update_at bigint |
1 | 营运管理 | 1555645646546 | 1555645646546 |
1 | 验卡 | 1555645646546 | 1555645646546 |
1 | 公共管理 | 1555645646546 | 1555645646546 |
1 | 卡种管理 | 1555645646546 | 1555645646546 |
1 | 课种管理 | 1555645646546 | 1555645646546 |
auth_role表结构
Id primary key | name(高级角色) varchar(255) | company_id(公司ID) smallint(6) | venue_id(场馆ID) bigint | update_at bigint | create_at bigint | derive_id(派生角色ID) bigint |
1 | 营运经理 | 1 | [12,14,59] | 1555645646546 | 1555645646546 | 0 |
2 | 水吧员工 | 1 | [12] | 1555645646546 | 1555645646546 | 1 |
3 | CEO | 1 | [12,14,16,19,20,28,49,55,54,58,53] | 1555645646546 | 1555645646546 | 0 |
4 | 团教经理 | 1 | [12,14,59] | 1555645646546 | 1555645646546 | 0 |
5 | 吧台员工 | 1 | [12] | 1555645646546 | 1555645646546 | 1 |
模块 =》 子模块 =》 功能 ; 我们动态的为RBAC基础表,添加权限和基础角色, 模块表中的name是auth_item中的基础角色名称。模块中的路由,则是auth_item中权限的名称。然后,基础角色和权限建立关系。分配好模块,添加过基础角色和权限,并建立关系后,
下一步,我们创建高级角色,给高级角色添加属性,如:组织架构等。创建好高级角色后,我们需要把低级角色绑定给我们的高级角色。好了,一切都准备就绪,我们就可以把用户绑定给我们的高级角色。注意,上一篇RBAC中说到,在模块化的系统中,由于菜单、模块、功能、以及页面元素过多,导致的RBAC在分配用户时,导致的基础角色过多问题。我们这里做了一套独有的解决方案,即:派生规则。我们可以拿到一个高级角色的权限,然后往下派生低级角色,基础高级角色pid是0,这样清晰明了了公司高层到基层的层级关系,
例如:总经理(高级角色);我们可以拿到它的权限,往下派生。总经理=》副经理=》负责人=》组长等等角色和权限。
三、尾语
好了,yii2的RBAC权限到这就结束了,小伙伴们有什么建议和疑问可以在下面评论留言,如需转载请注明作者和来源,支持原创。