roleGroupOmniProfiles
содержит коллекцию KeyValuePair<string, RoleInfo>
, так что вы можете их контур, как показано ниже.
Но я не уверен, что вы можете получить RoleName
от RoleGroup
по UserID
поскольку UserID
не имеет прямого отношения к RoleGroup
. Не должно быть, чтобы вы получили все Роли от пользователя на основании UserID
и проверьте, какой RoleGroup
принадлежит Roles
, если таковые имеются.
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
UPDATE
Чтобы проверить, является ли пользователь Белу ngs в группу вы можете использовать это
DotNetNuke.Entities.Users.UserInfo user = DotNetNuke.Entities.Users.UserController.GetUserByName("userName");
bool isInGroup = roleGroupOmniProfiles.Roles.Keys.Any(role => user.IsInRole(role));
Извините, я заметил, что есть ошибка. Я проверил версию vb.net. Цикл возвращает последнее значение из roleGroup, даже если пользователь не принадлежит к каким-либо ролям в RoleGroup. – alwaysVBNET
Нет ошибок, поскольку фрагменты VB и C# ничего не делают с пользователями. Они просто петля ролей в коллекцию роллегентов. В цикле вы можете проверить 'UserInfo.IsInRole' и вернуть bool, если он найден, но это зависит от вашей реализации ... Я могу предоставить полное решение, если необходимо – VDWWD
Я думаю, что, возможно, я перепутал бы вопрос. Я имею в виду, чтобы получить роль, которую пользователь принадлежит к определенной группе. Я сделал это на основе вашего предложения. Считаете ли вы, что это оптимизированное решение или есть более быстрый способ достичь этого через linq? 'Для каждой роли As KeyValuePair (Of String, RoleInfo) В oRoleGroupInfo.Roles Если oUser.IsInRole (role.Value.RoleName) Тогда oRoleAndPhoto.RoleName = role.Value.RoleName oRoleAndPhoto.RolePhotoURL = role.Value.PhotoURL End If Next' – alwaysVBNET