通过 UserID 从 RoleGroup 获取 RoleName

Get RoleName from a RoleGroup by UserID

我有一个 RoleGroup,里面有一些 Roles。一个用户只能属于这些角色之一。我如何根据用户所属的 RoleGroup 获得 RoleName ?有什么想法吗?

Dim roleGroupOmniProfiles = RoleController.GetRoleGroupByName(PortalSettings.Current.PortalId, "OmniProfiles")

问题出在这里

Dim omniProfile = roleGroupOmniProfiles.Roles.Any(Function(role) oUser.UserID)

roleGroupOmniProfiles 包含 KeyValuePair<string, RoleInfo> 的集合,因此您可以如下所示循环它们。

但我不确定您能否通过 UserIDRoleGroup 获得 RoleName,因为 UserID 没有直接 link 到 RoleGroup。不应该是你根据UserID从一个用户那里得到所有的角色,然后检查Roles属于哪个RoleGroup,如果有的话。

C#

var roleGroupOmniProfiles = RoleController.GetRoleGroupByName(PortalId, "OmniProfiles");

if (roleGroupOmniProfiles != null)
{
    foreach (KeyValuePair<string, RoleInfo> role in roleGroupOmniProfiles.Roles)
    {
        Label1.Text += role.Key + " | " + role.Value.RoleName + "<br>";
    }
}

或单行

RoleInfo roleInfo = roleGroupOmniProfiles.Roles.Where(x => x.Value.RoleID == 15).FirstOrDefault().Value;

VB

If (Not (roleGroupOmniProfiles) Is Nothing) Then
    For Each role As KeyValuePair(Of String, RoleInfo) In roleGroupOmniProfiles.Roles
        Label1.Text += role.Key + " | " + role.Value.RoleName + "<br>"
    Next
End If

更新

要检查用户是否属于某个组,您可以使用此

DotNetNuke.Entities.Users.UserInfo user = DotNetNuke.Entities.Users.UserController.GetUserByName("userName");
bool isInGroup = roleGroupOmniProfiles.Roles.Keys.Any(role => user.IsInRole(role));