Java SailPoint报告限制用户视图

Java SailPoint报告限制用户视图,java,jasper-reports,beanshell,sailpoint,Java,Jasper Reports,Beanshell,Sailpoint,我们有5份针对94个地区的定制报告。功能授予对这些自定义报告的访问权限 问题是每个地区都不应该看到另一个地区的报告结果 目前,唯一的替代方案是创建5*94=470个自定义报告,为每个地区授予一组5个自定义报告。但是,当需要更新报告时,这会很麻烦。 TaskDefinitions(报告)创建TaskResult对象(报告的结果)。此外,对于TaskResult对象,将创建一个JasperReport对象。打开任务结果时,TaskResult/JasperResult对象都不会“重新执行”BeanS

我们有5份针对94个地区的定制报告。功能授予对这些自定义报告的访问权限

问题是每个地区都不应该看到另一个地区的报告结果

目前,唯一的替代方案是创建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。

欢迎使用堆栈溢出!访问,采取的,看看什么和。这个问题似乎更多地属于超级用户而不是StackOverflow。这可能需要编程干预,如果无法通过开箱即用的功能获得,则可能以插件的形式出现——有了这些额外的信息,您还会将其指向超级用户论坛吗?