0

我正在尝试在 Sailpoint 中编写违反政策的内容。但我不知道如何获得要求新权利的用户的权利。我试过这个:

List links1 = null;
IdentityService service = new IdentityService(context);
Application app1 = context.getObjectByName(Application.class, "Autres");
try {
  links1 = service.getLinks(identity, app1);
} catch (Exception e)
{
  System.out.println(e.getMessage());
  e.printStackTrace();
}

List DUList1 = new ArrayList();

if(links1.size() != 0){

  Object DUObj = links1.get(0).getAttribute("DU");
  if(DUObj != null){
  if (DUObj instanceof String)
    DUList1.add((String) DUObj);
  else
    DUList1.addAll((List) DUObj);
  }
}

它应该返回用户拥有的权限列表以及他所要求的权限。但它不起作用。

4

1 回答 1

2

IIQ 中的“链接”是帐户,是您从 IIQ 应用程序中获得的实体。

IIQ 使用 2 种“权利”,即权利和角色。

权利通常从 IIQ 应用程序聚合为“组”,而角色则手动定义为纯 IIQ 实体。您可能将角色视为一组权利(粗略地说)。

因此,为了检查 IIQ 身份具有哪些“权利”,您必须检查权利和角色。

由于您正在制定一项政策,我假设您正在为访问请求尝试一些东西。在这种情况下,您可以考虑将角色转换为一组权利,因此最终我们要检查的是权利。

我想您的应用程序“Autres”正在汇总帐户和权利,对吗?因此,在您的应用程序架构中,至少有 1 个帐户属性被标记为“权利”。假设你有这样的东西

帐户架构

  • 登录(与您的身份相关,唯一标识您的帐户)
  • 全名
  • groupsXYZ(与您的权利相关)

然后你的规则将使用这样的东西获得权利

Application app = context.getObjectByName(Application.class, "Autres");
Link account = identity.getLink(app);
Object groups = account.getAttribute("groupsXYZ");
if (groups == null){
  ...
}else if (groups instanceof List){
  ...
}else if (groups instanceof String){
  ...
}

现在,请注意组可以是列表或字符串。这取决于您的帐户是否具有与之关联的一项或多项权利。因此,您需要先检查类型(我真的不知道为什么 IIQ 不总是使用 List,可能是因为它们在内部映射 XML 的方式),但是您必须小心它并提供适当的类型转换。

因此,在您展示的情况下,“DU”是否映射到代表权利的应用程序帐户属性?例如,您可以调试和打印所有属性,以查看与您的帐户相关联的内容(链接)。

现在,如果我们不是在谈论权利,而是在谈论 IIQ 角色,那么我们正在谈论这样的事情

Bundle someRole = context.getObjectByName(Bundle.class,"My IIQ Role ABC");
boolean hasRole = identity.hasRole(someRole);
于 2021-04-21T14:16:35.130 回答