我正试图在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);
}
}它应该返回用户拥有的权限和他所请求的权限的列表。但它不起作用。
发布于 2021-04-21 22:16:35
IIQ中的“链接”是帐户,是您从IIQ应用程序中获得的实体。
IIQ使用两种类型的“权限”,即权限和角色。
授权通常从IIQ应用程序聚合为“组”,而角色则手动定义为纯IIQ实体。您可以将角色视为授权的组(粗略地说)。
因此,为了检查IIQ身份拥有哪些“权限”,您必须检查权限和角色。
由于您正在处理策略,因此我假设您正在尝试访问请求。在这种情况下,您可以考虑将角色转换为一组权限,因此,我们最终需要检查的是权限。
我认为您的应用程序"Autres“正在聚合帐户和授权,对吗?因此,在您的应用程序架构中,至少有一个帐户属性被标记为“授权”。假设你有这样的东西
帐户方案
然后,您的规则将使用如下所示来获取授权
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);https://stackoverflow.com/questions/61900809
复制相似问题