Utilizzando web-api 2 e identità 2, sto cercando di creare un'azione per rimuovere un utente dai ruoli utilizzando l'ID utente ei nomi dei ruoli. Sto usando ApplicationUserManager fornito dall'esempio di identità2 di nuget.Impossibile rimuovere utenti da un ruolo specifico
mia azione
[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();
}
mio punto di vista il modello:
public class UserRolesViewModel
{
[Required]
public string UserId { get; set; }
[Required]
public IList<string> RoleNames { get; set; }
}
di ApplicationUserManager 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);
}
Il mio problema è che, dato un utente appartenente ai ruoli 'utente' e ' Mod ', l'utente non può essere rimosso da' Mod '. Distacco il seguente JSON rimuove l'utente dal ruolo 'utente' come previsto:
{
"userId": "0d5f97e4-65a0-43ad-b889-0af98a7ff326",
"roleNames": [
"User"
]
}
Ma data la seguente JSON, l'utente non viene rimosso dal 'Mod', ma è invece rimosso dal 'utente':
{
"userId": "0d5f97e4-65a0-43ad-b889-0af98a7ff326",
"roleNames": [
"Mod"
]
}
Il debug mostra che quando viene assegnato il ruolo 'Mod', l'ID utente corretto e il nome del ruolo vengono passati in userRoleStore.
Grazie - Ti capita di avere una fonte per questo? –
https://aspnetidentity.codeplex.com/workitem/2069 –
Ahh - Ho aggiornato alla 2.0.1 nel mio progetto principale ma ho dimenticato e sono rimasto a 2.0 nel mio test. Grazie ancora –