一. 关键场景说明
公司
- 场景:公司是最先存在的,对应现实场景相当于去工商局登记注册公司,这个时候公司可以没有组织架构,当你有营业执照,有办公场地,有经营范围等;
- 数据表:sys_company
账号 - 场景:老板招聘第一员工,给你开一个门禁账号如(账号:13700000001),让做一些超级权限的数据,比如把组织架构弄起来
- 数据表: sys_user
组织架构 - 场景:组织架构是公司上下管理的载体,对应到技术上,它也是数据权限的载体,如果某个功能要做数据权限分级控制,账号必须的关联到组织架构
- 数据表: sys_org
员工 - 场景:员工是一个真实存在的人,有姓名,性别,年龄,学历,他可以跟账号去绑定
- 对应的表:sys_employee
二. 示例说明
权限如何控制(通过员工管理功能演示权限控制):
组织架构如下: 账号:13700000001关联 员工张三,员工张三和李四在人事部门下面,人事部下有个财务组,王五在财务组下,老板在上海总部下
上海总部
人事部
财务组
王五(工号:0005,账号:13700000003,部门管理:管理员,职位:员工)
张三 (工号:0002,账号:13700000001,部门管理:管理员,职位:员工)
李四 (工号:0003,账号:13700000002,部门管理:成员,职位:总经理)
技术部
销售部
老板 (工号:0001,账号:13700000000,部门管理:管理员,职位:老板)
数据权限只跟部门管理有关系,跟职位没关系。 职位是总经理,但在部门是普通成员,如李四,在数据权限上也只能看自己的数据。
组织表:sys_org
id | org_name | org_code | oauth_code | parent_id |
1 | 上海总部 | shzb | 1- | |
2 | 人事部 | rsb | 1-2- | 1 |
3 | 技术部 | jsb | 1-3- | 1 |
4 | 销售部 | xsb | 1-4- | 1 |
5 | 财务组 | cwz | 1-2-5- | 2 |
oauth_code :权限控制字段,构成格式 oauth_code = 父oauth_code + ID(当前行的自增长列)
员工表:sys_employee
id | name | sex | mobilephone | org_manage | position | org_id | oauth_code |
1 | 老板 | 男 | 1370000000 | 1 | 老板 | 1 | 1-@1 |
2 | 张三 | 男 | 1370000001 | 1 | 员工 | 2 | 1-2-@2 |
3 | 李四 | 男 | 1370000002 | 0 | 总经理 | 2 | 1-2-@3 |
4 | 王五 | 男 | 1370000004 | 0 | 员工 | 5 | 1-2-5-@4 |
org_manage: 部门管理,1代表是,0代表不是
oauth_code: 权限字段,oauth_code = 对应部门的oauth_code + @ + 员工ID(当前行的自增长列) ,@ 是为了好区分,后面是员工ID ,
查询说明:
以老板登录(账号:13700000000)进来,数据权限控制:
通过老板的账号获取所在组织权限 oauth_code 是 1- ,由于老板是管理员,他的查询条件就是 like ‘1-%’ , 通过如下可以查出上面的4个员工
select * from sys_employee where oauth_code like '1-%'
1 | 老板 | 男 | 1370000000 | 1 | 老板 | 1 | 1-@1 |
2 | 张三 | 男 | 1370000001 | 1 | 员工 | 2 | 1-2-@2 |
3 | 李四 | 男 | 1370000002 | 0 | 总经理 | 2 | 1-2-@3 |
4 | 王五 | 男 1 | 370000004 | 0 | 员工 | 5 | 1-2-5-@4 |
以张三登录(账号:13700000001)进来,数据权限控制:
通过张三的账号获取所在组织权限 oauth_code 是 1-2- ,由于张三是管理员,他的查询条件就是 like ‘1-%’ , 通过如下可以查出上面的2个员工
select * from sys_employee where oauth_code like '1-2-%'
2 | 张三 | 男 | 1370000001 | 1 | 员工 | 2 | 1-2-@2 |
3 | 李四 | 男 | 1370000002 | 0 | 总经理 | 2 | 1-2-@3 |
以李四登录(账号:13700000002)进来,数据权限控制:
通过李四的账号获取所在组织权限 ,都是在人事部, 所以 oauth_code 也是 1-2- ,由于李四是普通成员,他的查询条件就是
like ‘1-2-@3%’ ,注意:这个时候就要加 @3 ,3 是李四的主键ID, 通过如下只能查到自己的
select * from sys_employee where oauth_code like '1-2-@3%'
3 | 李四 | 男 | 1370000002 | 0 | 总经理 | 2 | 1-2-@3 |
如果员工在多部门可以如下构建
select * from sys_employee where oauth_code like '1-2-%' or oauth_code like '1-3-%'