2014-04-30 28 views
5

Sử dụng web-api 2 và danh tính 2, tôi đang cố gắng tạo hành động để xóa người dùng khỏi vai trò bằng cách sử dụng id người dùng và tên vai trò. Tôi đang sử dụng ApplicationUserManager được cung cấp bởi mẫu nuget identity2.Không thể xóa người dùng khỏi vai trò cụ thể

hành động của tôi

[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(); 
} 

xem mô hình của tôi:

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

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

ApplicationUserManager của 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); 
} 

Vấn đề của tôi là cho người dùng thuộc các vai trò 'Người dùng' và ' Mod ', người dùng không thể bị xóa khỏi' Mod '. Đăng json sau xóa bỏ các người dùng từ vai trò 'Người dùng' như mong đợi:

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

Nhưng với json sau, người dùng không khỏi 'Mod', nhưng thay vì loại bỏ từ 'Người dùng':

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

Gỡ lỗi cho thấy rằng khi được cung cấp vai trò 'Mod', id người dùng và tên vai trò chính xác được chuyển vào userRoleStore.

Trả lời

4

Đây là một lỗi mà cần được cố định trong phiên bản 2.0.1

+0

Cảm ơn - làm bạn tình cờ có một nguồn cho điều này? –

+0

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

+0

Ahh - Tôi cập nhật lên 2.0.1 trong dự án chính của mình nhưng đã quên và ở mức 2.0 trong thử nghiệm của mình. Cảm ơn một lần nữa –

0

// xấu xí nhưng việc

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)); 
Các vấn đề liên quan