2017-01-27 8 views
0

Я использую Identity в проекте с расширенными свойствами В классе ApplicationUser как OrganisationId.Как найти всех пользователей в роли с расширенными свойствами Значение Asp.net Identity 2

Я использую ApplicationUserManager для чтения сведений о пользователе.

вот мой ApplicationUser класс:

public class ApplicationUser 
    : IdentityUser<int, ApplicationUserLogin, 
     ApplicationUserRole, ApplicationUserClaim>, IUser<int> 
{ 
    public async Task<ClaimsIdentity> 
     GenerateUserIdentityAsync(UserManager<ApplicationUser, int> manager) 
    { 
     var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 

     userIdentity.AddClaim(new Claim("OrganisationId", OrganisationId.ToString())); 
     return userIdentity; 
    } 

    public int OrganisationId { get; set; } 
} 

А в классе AccountController я впрыснуть объект ApplicationUserManager.

Тогда пользовательский объект-менеджер дает мне способ найти пользователя в роли или нет.

var isUserAdmin = await _userManager.IsInRoleAsync(userId, adminRoleName); 

Но мне нужен способ найти всех пользователей, у которых есть права администратора в организации.

Что-то вроде этого:

_userManager.Users.Where(u=>u.OrganisationId=1 && u.Roles.Contains(adminRole)) 

Но это не работает, как ролям является сбор ApplicationUserRole.

Любая идея, как мне удалось получить всех пользователей-администраторов в организации?

+0

http://www.stackoverflow.com/questions/26894327/asp-net-identity-2-1-get-all-users-with-roles – Hackerman

ответ

1

Просто используйте:

u.Roles.Any(m => m.RoleId == adminRole.Id) 

Вместо.

+0

Большое спасибо. Это прекрасно работает. Единственная проблема заключается в том, что я должен сначала запросить поиск идентификатора роли и не могу просто использовать имя роли. – akd

+0

Да. К сожалению, это не так. –