需求场景:再帆软报表开发过程中 同一张报表的同一个列中(数据集的某一个字段有四个值),有四个产品线,如何使产品线所在的部门只能看到其所在产品线的数据,其他产品线的数据对其进行隐藏。
(通俗来讲就是,数据集中某一个字段的值,如何才能使不同的值对不同的登录用户开放呢)

方案1.用js代码来实现这个功能,根据当前登陆的角色来
0.你需要定义两个参数 ${DivisionFranchiseName} 和 ${PL_Platform},用于动态传递用户角色对应的值。不进行参数判断,如果为空就给他个返回值"没有权限"。
1、设置两个控件分别是BU和平台两个下拉复选框控件
2、添加js事件,先默认全部隐藏,然后再根据当前用户登陆的角色来决定使用数据字典中的哪个值传递给这个下拉复选框控件(前提是要先给用户授予某一个角色)
缺点: 把某个角色所能够查看的值,给直接写死了,不够灵活。
js代码如下:

var currentUserRole = fr.report.context.currentUser.role; // 获取当前用户角色
var divisionFranchiseName = ""; // 根据角色获取对应的 DIM_DivisionFranchiseName 值
var plPlatform = ""; // 根据角色获取对应的 PL_Platform 值

// 假设角色与字段值的映射关系如下
if (currentUserRole === "Role1") {
    divisionFranchiseName = "Value1";
    plPlatform = "Platform1";
} else if (currentUserRole === "Role2") {
    divisionFranchiseName = "Value2";
    plPlatform = "Platform2";
}

// 将值赋给参数
fr.parameter.Map.put("DivisionFranchiseName", divisionFranchiseName);
fr.parameter.Map.put("PL_Platform", plPlatform);

方案2
建立一个外部表,表中建立“服务器登录用户名(fine_user)”或者角色(fine_role)字段,同时还要有对应的其他字段名,
比如产品线字段名,使一个用户名对应一个产品线字段名,通过select 产品线 from 外部表 where 角色= ‘${fine_role}’ 把这个sql语句
放在主数据sql的where条件下对某个字段进行过滤的子查询里。从而能够通过判断当前登陆的角色,拿到角色所能够查看的字段,再传递给where的查询条件。
优点是: 通过手动的给外部表添加或者减去某个字段的值,从而控制用户对于访问数据集的字段值的显示与否,更加灵活。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐