SailPoint 报告限制用户查看

问题描述

我们为 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 组。

解决方法

我认为你在这里没有好的选择。

我想到的是以编程方式创建这些报告(例如编写一些脚本来为 TaskDefinition 生成 XML 工件并使用 IIQDA 导入/导出)并以相同的方式维护它们,因此每次您需要更改每个这数百个工件中的一个,您可以通过代码重新生成它们。

我唯一会以不同方式做的事情是为每个 5 组报告使用 94 个范围,而不是使用功能。