数据安全,是每家公司在进行数据建设时,都会重点考虑的问题。如何避免人员调整所带来的数据规则变化,减少数据控制阶段的工作量及增加严谨性,是用户的真实诉求和痛点。

永洪bi在权限管理层面,将用户的相关信息封装成参数,可直接应用在数据预处理和报表制作阶段,不仅满足了大量场景下数据权限管控,更在一定程度上规避了因“人员调整”导致的数据规则手工修改情况。

本次,我们就一个双重数据规则限制场景,详细讲解相关操作及实现效果。

一、权限要求场景

1、员工登录bi系统,①根据所属岗位(a岗/b岗… …),确定岗位属性;②根据员工所属部门(部门a/部门b… …),确定部门属性;通过双重限制的权限条件实现数据过滤;

2、若a员工为a岗、部门a,则可以看到表1 数据表中,“a岗”列中值为“部门a”的数据记录;

3、若a员工为b岗、部门b,则可以看到表1 数据表中,“b岗”列中值为“部门b”的数据记录。

表1 数据表

项目日期 事业线 a岗 b岗 crm商机号 pms项目编号 主项目名称 项目类型 项目经理 客户经理
2021/1/1 事业线a 部门a 部门b crm001 pms010 优质a类 a 张三
2021/2/1 事业线a 部门b 部门b crm002 pms020 优质a类 aaa 李四
2021/3/1 事业线a 部门c 部门a crm003 pms030 良好b类 a 张三
2021/4/1 事业线a 部门c 部门a crm004 pms040 良好b类 b 李四
2021/5/1 事业线b 部门b 部门a crm005 pms050 劣质c类 aaa 张三
2021/6/1 事业线b 部门a 部门b crm006 pms060 劣质c类 b 李四
2021/7/1 事业线b 部门b 部门b crm007 pms070 良好b类 aa 张三
2021/8/1 事业线c 部门c 部门a crm008 pms080 劣质c类 a 李四
2021/9/1 事业线c 部门a 部门c crm009 pms090 优质a类 b 张三
2021/10/1 事业线c 部门a 部门a crm010 pms100 良好b类 a 李四

二、场景实现方式

1、数据导入

将表1 数据表中的数据导入到数据集中,图1使用的是创建数据集的sql数据集。(本示例采用mysql5.7.18版本的数据库

图1 数据表导入

2、报告制作

根据表1 数据表制作一维表的报告,图2使用的是制作报告图表组件的表。

图2 一维表制作

3、用户配置

新增4个用户、3个分组、2个角色,并配置权限关系,表2使用的是认证授权导出的用户信息。

表2 用户信息

admin1权限配置,配置所有模块读写权限,用于设定后续的权限过滤。

3个测试用户(test1、test2、test3)权限配置,配置相关的的模块及操作权限即可,如图3所示。图3使用的是角色权限信息的配置结果。

图3 权限配置

4、权限过滤

admin1登录bi,通过数据集的sql编辑,实现权限配置逻辑。图4是变更数据集“表1 数据集”的查询语句。

逻辑实现:用户登录后,识别角色,判断通过哪一列进行过滤,再识别分组,判断过滤列的筛选值。

sql语句:

select * from date1

where 1=0 or

case

when ?{_roles_}=”a岗” then a岗 in (?{_groups_})

when ?{_roles_}=”b岗” then b岗 in (?{_groups_})

else 1=0

end

图4 逻辑实现

三、场景实现效果

1、用户test1(a岗;部门a)登录,结果如图5所示。

图5 test1登录结果

2、用户test2(b岗;部门b)登录,结果如图6所示。

图6 test2登录结果

3、用户test3(a岗;部门c)登录,结果如图7所示。

图7 test3登录结果

该场景实现了对不同权限用户的数据过滤,核心逻辑是:根据第一个属性值,获取判断条件列;根据第二个属性值,获取条件列的筛选结果值;双重限制下,实现数据记录的条件过滤。