我正在向我的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;
}
}
}
}
答案 0 :(得分: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));