gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:22:48 24 4
gpt4 key购买 nike

使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com