Mit Web-API 2 und Identität 2 versuche ich eine Aktion zum Entfernen eines Benutzers aus Rollen mit Benutzer-ID und Rollennamen zu erstellen. Ich verwende den ApplicationUserManager, der vom nuget identity2-Beispiel bereitgestellt wird.Benutzer können nicht aus einer bestimmten Rolle entfernt werden
Meine Aktion
[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();
}
Meine Ansicht Modell:
public class UserRolesViewModel
{
[Required]
public string UserId { get; set; }
[Required]
public IList<string> RoleNames { get; set; }
}
ApplicationUserManager des 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);
}
Mein Problem ist, dass ein Benutzer gegeben, die zu den Rollen 'User' und ' Mod 'kann der Benutzer nicht von' Mod 'entfernt werden. Buchen die folgende json entfernt der Benutzer aus der Rolle ‚Benutzer‘ wie erwartet:
{
"userId": "0d5f97e4-65a0-43ad-b889-0af98a7ff326",
"roleNames": [
"User"
]
}
Aber die folgenden json gegeben, Benutzer von ‚Mod‘ nicht entfernt wird, sondern stattdessen von ‚User‘ entfernt:
{
"userId": "0d5f97e4-65a0-43ad-b889-0af98a7ff326",
"roleNames": [
"Mod"
]
}
Debugging zeigt, dass bei Angabe der Rolle 'Mod' die korrekte Benutzer-ID und der korrekte Rollenname an userRoleStore übergeben werden.
Dank - haben Sie eine Quelle für diese haben passieren? –
https://aspnetidentity.codeplex.com/workitem/2069 –
Ahh - Ich aktualisiert auf 2.0.1 in meinem Hauptprojekt, aber vergaß und blieb bei 2.0 in meinem Test. Danke noch einmal –