我们有针对94个地区的5个自定义报告。功能授予对这些自定义报告的访问权限。
问题是每个地区都不应该看到来自另一个地区的报告结果。
目前,唯一的替代方案是创建5* 94 = 470个自定义报告,向每个地区授予一组5个报告。但是,当需要更新报告时,这会很麻烦。TaskDefinitions (报告)创建TaskResult对象(报告的结果)。此外,还会为TaskResult对象创建一个JasperReport对象。当您打开任务结果时,TaskResult/JasperResult对象都不会“重新执行”BeanShell。
有没有办法只有5个报告和范围的结果,以便只有该地区的用户可以看到它们?
我有一个示例,说明基于下面的代码如何实现这一点,该代码将查看运行报告的人的作用域。它将只返回与运行报告的标识在同一范围内的标识
// Retrieve Scope of Executor then filter all Identities on that Scope only
import org.apache.commons.logging.Log;
import sailpoint.object.Filter;
import sailpoint.object.Identity;
import sailpoint.object.Scope;
Identity identity = context.getObjectByName(Identity.class, arguments.get("launcher"));
if (identity != null) {
String scopeName = identity.getAssignedScope().getDisplayableName();
List roleFilters = new ArrayList();
if (scopeName!= null) {
roleFilters.add(Filter.eq("identity.assignedScope.name", scopeName));
}
if (!roleFilters.isEmpty()) {
queryOptions.addFilter(Filter.or(roleFilters));
}
} else {
// When Saving with Preview or Execute the Launcher is empty so all results would be shown.
// This filter will prevent that (creates empty report, it works when executed from the My Reports
queryOptions.addFilter(Filter.eq("identity.name", "xxx"));
}
return queryOptions;上面代码示例的问题是:
这将为A组创建报告,但是B组和C组也可以查看该报告。
因此,最终目标是拥有一个任何人都可以运行的报告,但是,无论涉及什么用户组(范围),都只能看到与该范围相关联的数据。因此,即使A组运行B组,B组也只能查看B组。
发布于 2021-07-14 05:28:49
我觉得你没有什么好的选择。
我想到的是以编程的方式创建这些报告(例如,编写一些脚本为TaskDefinition生成XML工件,并使用IIQDA导入/导出),并以相同的方式维护它们,因此每次您需要更改这数百个工件中的每一个时,都可以通过代码重新生成它们。
我唯一不同的做法是对每个5集报告使用94个作用域,而不是使用功能。
https://stackoverflow.com/questions/67474007
复制相似问题