SailPoint 报告限制用户查看
SailPoint reporting limit user view
我们的 94 个学区有 5 个自定义报告。能力 g运行ts 访问这些自定义报告。
问题是每个区应该看不到另一个区的报告结果。
目前,唯一的选择是创建 5 * 94 = 470 个自定义报告,g运行为每个地区设置一组 5 个。但是,当需要更新报告时,这很麻烦。
TaskDefinitions(报告)创建 TaskResult 对象(报告的结果)。此外,对于 TaskResult 对象,还创建了一个 JasperReport 对象。当您打开任务结果时,TaskResult/JasperResult 对象都不会“重新执行”BeanShell。
有没有办法只包含 5 个报告并确定结果范围,以便只有该地区的用户才能看到它们?
我有一个示例,说明如何根据下面的代码实现这一目标,该代码将查看 运行 编写报告的人员的范围。它只会 return 与正在报告 运行 报告
在同一范围内的身份
// 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 组。
我认为您在这里没有好的选择。
我想到的是以编程方式创建这些报告(编写一些脚本来为 TaskDefinition 和 importing/exporting 生成 XML 工件,例如使用 IIQDA)并以相同的方式维护它们,因此每次您需要更改这数百个工件中的每一个时,您都可以通过代码重新生成它们。
我唯一会以不同的方式做的是为每个 5 组报告使用 94 个示波器,而不是使用功能。
我们的 94 个学区有 5 个自定义报告。能力 g运行ts 访问这些自定义报告。
问题是每个区应该看不到另一个区的报告结果。
目前,唯一的选择是创建 5 * 94 = 470 个自定义报告,g运行为每个地区设置一组 5 个。但是,当需要更新报告时,这很麻烦。 TaskDefinitions(报告)创建 TaskResult 对象(报告的结果)。此外,对于 TaskResult 对象,还创建了一个 JasperReport 对象。当您打开任务结果时,TaskResult/JasperResult 对象都不会“重新执行”BeanShell。
有没有办法只包含 5 个报告并确定结果范围,以便只有该地区的用户才能看到它们?
我有一个示例,说明如何根据下面的代码实现这一目标,该代码将查看 运行 编写报告的人员的范围。它只会 return 与正在报告 运行 报告
在同一范围内的身份// 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 组。
我认为您在这里没有好的选择。
我想到的是以编程方式创建这些报告(编写一些脚本来为 TaskDefinition 和 importing/exporting 生成 XML 工件,例如使用 IIQDA)并以相同的方式维护它们,因此每次您需要更改这数百个工件中的每一个时,您都可以通过代码重新生成它们。
我唯一会以不同的方式做的是为每个 5 组报告使用 94 个示波器,而不是使用功能。