2012-07-30 43 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

相关问题