c# - 无法从特定角色中删除用户

标签 c# asp.net asp.net-web-api asp.net-identity

使用 web-api 2 和身份 2,我正在尝试创建一个操作,使用用户 ID 和角色名称从角色中删除用户。我正在使用 nuget identity2 示例提供的 ApplicationUserManager。

我的行动

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

我的 View 模型:

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

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

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

我的问题是,给定属于“User”和“Mod”角色的用户,无法从“Mod”中删除该用户。发布以下 json 会按预期将用户从“用户”角色中删除:

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

但是给定以下 json,用户不会从“Mod”中删除,而是从“User”中删除:

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

调试显示当给定角色“Mod”时,正确的用户 ID 和角色名称被传递到 userRoleStore。

最佳答案

这是一个应该在 2.0.1 版本中修复的错误

关于c# - 无法从特定角色中删除用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399491/

相关文章:

c# - 组合框数据绑定(bind)()检查

c# - Parallel for each 循环不保存所有文件

c# - 如何在 C# 中声明一个类以便我可以链接方法?

c# - 如何使用多线程为集合中的每个项目调用存储过程

asp.net - ViewModel 的列表在操作中为 null

c# - Linq to SQL Group by 和 sum in select with entity

javascript - 从 WebAPI 获取 PDF 并从 UI 下载,但数据已损坏

C# 我想将工作簿附加到 Outlook 电子邮件并在发送前预览

c# - ASP.NET/MVC : The requested resource does not support http method 'GET'

c# - 在 Umbraco 版本 7.3.5 中获取当前用户