2014-04-30 18 views
5

Web-api 2 ve kimlik 2'yi kullanarak, kullanıcı kimliğini ve rol adlarını kullanarak bir kullanıcıyı rollerden kaldırmak için bir eylem oluşturmaya çalışıyorum. Ben nuget identity2 sample tarafından sağlanan ApplicationUserManager kullanıyorum.Kullanıcıları belirli rollerden kaldırılamıyor

My eylem

[HttpPost] 
[Route("RemoveUserFromRole")] 
public async Task<IHttpActionResult> RemoveUserFromRole(UserRolesViewModel model) 
{ 
    if (!ModelState.IsValid) 
     return BadRequest(ModelState); 

    var result = await UserManager.RemoveUserFromRolesAsync(
     model.UserId, model.RoleNames); 

    if (result.Errors.Any()) 
     return InternalServerError(); 

    return Ok(); 
} 

Bence modeli:

public class UserRolesViewModel 
{ 
    [Required] 
    public string UserId { get; set; } 

    [Required] 
    public IList<string> RoleNames { get; set; } 
} 

ApplicationUserManager en RemoveUserFromRolesAsync:

public virtual async Task<IdentityResult> RemoveUserFromRolesAsync(
    string userId, IList<string> roles) 
{ 
    var userRoleStore = (IUserRoleStore<ApplicationUser, string>) Store; 

    var user = await FindByIdAsync(userId).ConfigureAwait(false); 
    if (user == null) 
     throw new InvalidOperationException("Invalid user Id"); 

    var userRoles = await userRoleStore.GetRolesAsync(user).ConfigureAwait(false); 
    foreach (var role in roles.Where(userRoles.Contains)) 
     await userRoleStore.RemoveFromRoleAsync(user, role).ConfigureAwait(false); 

    return await UpdateAsync(user).ConfigureAwait(false); 
} 

Benim sorun olduğunu roller 'Kullanıcı' ve ait bir kullanıcı verilen ' Mod ', kullanıcı' Mod''den kaldırılamaz. beklendiği gibi rol 'Kullanıcı' dan kullanıcı aşağıdaki json kaldırır Gönderme:

{ 
    "userId": "0d5f97e4-65a0-43ad-b889-0af98a7ff326", 
    "roleNames": [ 
     "User" 
    ] 
} 

Ama şu json verilen kullanıcı 'Mod' kaldırılmaz, ancak bunun yerine 'Kullanıcı' kaldırılır:

{ 
    "userId": "0d5f97e4-65a0-43ad-b889-0af98a7ff326", 
    "roleNames": [ 
     "Mod" 
    ] 
} 

Hata ayıklama, 'Mod' rolü verildiğinde doğru kullanıcı kimliği ve rol adının userRoleStore'a aktarıldığını gösterir.

cevap

4

Bu 2.0.1

+0

Teşekkür işleri gereken bir hata oldu - Bunun için bir kaynak biliyor olabilir misin? –

+0

https://aspnetidentity.codeplex.com/workitem/2069 –

+0

Ahh - Ana projemde 2.0.1 olarak güncelledim, ancak unuttuğum ve testimde 2.0'da kaldım. Tekrar teşekkürler –

0

// çirkin sürümde giderilecektir ancak

db.Database.ExecuteSqlCommand(@"delete from aspnetuserroles from 
aspnetuserroles ur inner join aspnetroles r on r.id=ur.roleid inner join aspnetusers 
u on u.id=ur.userid where [email protected] and [email protected]", 
    new SqlParameter("@role",RoleName) , 
    new SqlParameter("@user",UserName)); 
İlgili konular