2012-07-30 42 views
4

我在我的DNN模塊上添加了一個檢查,以便某些用戶在登錄時不必回答某些問題。而不是對每個單獨角色進行硬編碼,而是僅排除特定角色組中的任何人。這樣,如果我們將來有更多的角色,我們可以將它們添加到角色組中,如果我們希望將它們排除在外。DNN檢查用戶是否在角色組

但是,我不知道你是如何檢查用戶是否在角色組中。我知道如何檢查角色,但如果他們在一個組中,則不知道該組。

解決方案:這是我根據我得到的答案放在一起的代碼。應該管用。

RoleGroupInfo RoleGrp = RoleController.GetRoleGroupByName(this.PortalId, "Role Group"); 
bool bShouldSkipQuestions = false; 
if (RoleGrp != null) 
{ 
    Dictionary<string, RoleInfo> GroupChk = RoleGrp.Roles; 
    if (GroupChk.Count > 0) 
    { 
     foreach (var item in GroupChk.Values) 
     { 
      if (_user.IsInRole(item.RoleName)) 
      { 
       bShouldSkipQuestions = true; 
       break; 
      } 
     } 
    } 
} 

回答

6

角色組是不是真的打算這樣(他們僅僅用於最終用戶組織)使用,所以沒有檢查直接的方式。您需要獲取組中的所有角色(RoleController.GetRolesByRoleGroup),然後檢查PortalSecurity.IsInRoles,並傳遞角色名稱的逗號分隔字符串。

試試這個代碼:

var roleGroup = RoleController.GetRoleGroupByName(this.PortalId, "Role Group"); 
var shouldSkipQuestions = roleGroup != null 
          && roleGroup.Roles.Keys.Any(role => _user.IsInRole(role)); 
+0

這看起來像它會工作。要測試它,然後將我的代碼添加到我的問題中,以便其他人可以看到我的方法。 – Mitchell 2012-07-30 14:44:58

+0

我也會檢查'roleGroup.Roles!= null'。 – abatishchev 2012-07-30 15:28:36

+0

'Roles'是一個屬性,如果後臺字段爲null,則自動初始化它。不應該存在這樣的情況,即屬性本身是「空」的。 – bdukes 2012-07-30 16:20:28

相關問題