历史版本4 :四联表模型 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

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. 示例编辑

公司领导、区域主管、区域组员间存在树状关系,需要根据不同门店维度为用户分配不同权限。

实现效果为公司领导可以看到全部数据,区域主管看到对应区域的数据,区域组员只能看到自己的数据。详情请参考:多层级权限分配 。