4

我在我的 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;
            }
        }
    }
}
4

1 回答 1

7

角色组并不是真的打算像那样使用(它们仅用于最终用户组织),因此没有直接的方法来检查它。您需要获取组 ( RoleController.GetRolesByRoleGroup) 中的所有角色,然后检查PortalSecurity.IsInRoles,传入以逗号分隔的角色名称字符串。

试试这个代码:

var roleGroup = RoleController.GetRoleGroupByName(this.PortalId, "Role Group");
var shouldSkipQuestions = roleGroup != null 
                          && roleGroup.Roles.Keys.Any(role => _user.IsInRole(role));
于 2012-07-30T14:19:09.137 回答