DNN 检查用户是否属于角色组

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;
            }
        }
    }
}
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));

这看起来应该可行。我会测试一下,然后将我的代码添加到我的问题中,以便其他人可以看到我的做法。 - Mitchell
我也会检查 roleGroup.Roles != null - abatishchev
“Roles”是一个属性,如果后备字段为“null”,则会自行初始化。不应该出现属性本身为“null”的情况。 - bdukes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接