2012-06-02 76 views
0

我想获取当前登录用户角色下的所有角色。 我们不知道层次结构中的层次,它会根据登录用户而变化。获取当前用户角色下的所有角色

对我们如何才能做到这一点上我想看到所有currentUserRoleId下的角色,而每个级别下的角色,一个通用的方法

currentUserRoleId= userInfo.getUserRoleId(); 

任何指针。

谢谢

回答

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

我没有测试过这一点,所以让我知道,如果它不能正常工作。

+0

感谢@TriangleMan,在你的代码中,你提到的角色应该是RoleId不是吗?我收到一个变量未找到错误。 – Prady

+0

@Prady你是对的。我纠正了这个例子。 –

+0

谢谢@Triangle Man ..它像魅力一样工作。还有一件事返回subordinateRoles.addAll(remainingSubordinateRoles);抛出一个错误,说它应该只返回一个集合。我在一行中添加了addAll语句并返回了subordinateRoles。那之后工作正常。 – Prady

相关问题