1. 概述
1.1 背景
企业中存在复杂的层级关系,不同层级的用户拥有不同的的数据权限,并希望在查看业务数据时,不同层级的用户仅可查看自己所拥有权限下的数据。
原始方案:使用一张权限宽表记录用户在不同维度上拥有的权限信息,并在每个业务数据表上配置行权限。
注:本文示例使用品牌和区域维度来演示权限配置过程,用户可根据实际场景调整维度。
示例权限宽表如下图所示:
原始方案权限配置过程如下图所示:
1.2 问题描述
原始方案在真实场景中,会出现以下问题:
数据冗余:用户和维度权限间为多对多关系,权限宽表中有大量冗余信息。
权限宽表不易于动态权限配置:若新增一个维度,有 n 个不同的维度值,且当前权限宽表行数为 m ,则在权限宽表中最多需要插入 m * n 条记录。
1.3 解决方案
我们提出「四联表」模型,将一张权限宽表拆分成一张用户信息表、多个维度表和维度权限表,独立维护用户在不同维度上的权限信息。
相较于原始方案,「四联表」模型主要做了以下调整:
1)拆分权限宽表,即放弃原有的权限宽表,重新创建「用户信息表」、「维度表」和「维度权限表」。
2)使用「用户信息表」、「维度表」和「维度权限表」,联合「业务数据表」共同搭建「四联表」模型。模型搭建过程如下图所示:
2. 操作步骤
2.1 数据准备
在配置行权限前,用户需提前准备以下类型的数据表:
1)用户信息表:包含用户名等字段,且用户名字段值唯一。
2)维度表:包含维度字段,且维度字段值唯一。
3)维度权限表:包含用户名、维度等字段,存储用户在该维度上的权限信息。
4)业务数据表:包含维度等字段,存储该维度下实际的业务数据。
2.2 模型搭建
1)建立以下两类关联,详情请参考:设置关联 。
关联「用户信息表」与「维度权限表」,关联关系为 1:N,记录用户拥有的不同维度的权限信息。
关联「维度表」与「业务数据表」,关联关系为 1:N ,用于后续业务数据的查询。
2)设置登录用户所在字段。
3)打开「维度表」和「业务数据表」的「组件数据」使用权限,详情请参考:公共数据组件数据权限 。
4)在「维度表上」配置行权限,获取到登录用户有权限的维度。通过关联,在业务数据表中查询出相应维度下的数据。最终查看到多个维度的交集数据。
3. 动态配置行权限
企业的组织结构、职能部门、岗位等在经营中会经常发生变化,如何对变化部分进行数据权限配置呢?
3.1 新增维度
「四联表」模型易于扩展维度。新增维度时,用户需要配置相关关联,并在新增的维度表上配置一次行权限即可,系统会自动取多个维度的交集数据。
具体操作步骤如下:
1)准备一张「维度表」和一张「维度权限表」。
2)建立以下关联:
关联「用户信息表」与新增「维度权限表」,关联关系为 1:N
关联「维度表」与相关「业务数据表」,关联关系为 1:N
3)在新增的维度表上配置一次行权限。如下图所示:
3.2 新增业务数据表
新增业务数据表时,无需配置行权限,与对应的维度表进行关联即可。
例如:新增「业务数据表 XXX」 ,此表与「区域维度表」有逻辑关系,则将其与「区域维度表」进行关联。如下图所示:
4. 示例
公司领导、区域主管、区域组员间存在树状关系,需要根据不同门店维度为用户分配不同权限。
实现效果为公司领导可以看到全部数据,区域主管看到对应区域的数据,区域组员只能看到自己的数据。详情请参考:多层级权限分配 。