我正在尝试获取当前登录用户角色下的所有角色。我们不知道层次结构中的级别,它会根据登录用户而改变。
关于我们如何以通用方式实现这一目标的任何指示
currentUserRoleId= userInfo.getUserRoleId();
我想查看 currentUserRoleId 下的所有角色以及每个级别下的角色。
谢谢
我正在尝试获取当前登录用户角色下的所有角色。我们不知道层次结构中的级别,它会根据登录用户而改变。
关于我们如何以通用方式实现这一目标的任何指示
currentUserRoleId= userInfo.getUserRoleId();
我想查看 currentUserRoleId 下的所有角色以及每个级别下的角色。
谢谢
不幸的是,似乎没有预先构建的方法来做到这一点。但是,您应该能够编写代码以递归方式执行此操作,如下所示:
public static set<Id> getSubordinateRoles(Id roleId) {
map<Id, set<Id>> parentAndChildren = new map<Id, set<Id>>();
set<Id> children;
for(UserRole ur : [select Id, ParentRoleId from UserRole]) {
children = parentAndChildren.containsKey(ur.ParentRoleId) ? parentAndChildren.get(ur.ParentRoleId) : new set<Id>();
children.add(ur.Id);
parentAndChildren.put(ur.ParentRoleId, children);
}
return getSubordinateRoles(role, parentAndChildren);
}
public static set<Id> getSubordinateRoles(Id roleId, map<Id, set<Id>> parentAndChildren) {
set<Id> subordinateRoles = new set<Id>();
set<Id> remainingSubordinateRoles = new set<Id>();
if(parentAndChildren.containsKey(roleId)) {
subordinateRoles.addAll(parentAndChildren.get(roleId));
for(Id subRoleId : subordinateRoles) {
remainingSubordinateRoles.addAll(getSubordinateRoles(subRoleId, parentAndChildren));
}
}
subordinateRoles.addAll(remainingSubordinateRoles);
return subordinateRoles;
}
我还没有测试过,所以如果它不起作用,请告诉我。