2016-11-24 10 views
0

У меня есть RoleGroup с некоторым Roles. Пользователь может принадлежать только одной из этих ролей. Как я могу получить RoleName на основе RoleGroup, к которому принадлежит пользователь? Есть идеи?Получите RoleName из RoleGroup по UserID

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

Проблема здесь

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

ответ

1

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)); 
+0

Извините, я заметил, что есть ошибка. Я проверил версию vb.net. Цикл возвращает последнее значение из roleGroup, даже если пользователь не принадлежит к каким-либо ролям в RoleGroup. – alwaysVBNET

+0

Нет ошибок, поскольку фрагменты VB и C# ничего не делают с пользователями. Они просто петля ролей в коллекцию роллегентов. В цикле вы можете проверить 'UserInfo.IsInRole' и вернуть bool, если он найден, но это зависит от вашей реализации ... Я могу предоставить полное решение, если необходимо – VDWWD

+0

Я думаю, что, возможно, я перепутал бы вопрос. Я имею в виду, чтобы получить роль, которую пользователь принадлежит к определенной группе. Я сделал это на основе вашего предложения. Считаете ли вы, что это оптимизированное решение или есть более быстрый способ достичь этого через 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

 Смежные вопросы

  • Нет связанных вопросов^_^