2012-06-02 75 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

相關問題