一. 关键场景说明

公司

  • 场景:公司是最先存在的,对应现实场景相当于去工商局登记注册公司,这个时候公司可以没有组织架构,当你有营业执照,有办公场地,有经营范围等;
  • 数据表: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-%'