0

我正在尝试获取当前登录用户角色下的所有角色。我们不知道层次结构中的级别,它会根据登录用户而改变。

关于我们如何以通用方式实现这一目标的任何指示

  currentUserRoleId= userInfo.getUserRoleId();

我想查看 currentUserRoleId 下的所有角色以及每个级别下的角色。

谢谢

4

1 回答 1

3

不幸的是,似乎没有预先构建的方法来做到这一点。但是,您应该能够编写代码以递归方式执行此操作,如下所示:

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;
}

我还没有测试过,所以如果它不起作用,请告诉我。

于 2012-06-02T14:46:19.820 回答