Jam*_*mer 10 c# asp.net-core asp.net-core-identity
我们的应用程序中有一个屏幕,允许管理员角色的成员编辑用户帐户详细信息.
最终,任何用户对象都将发送到服务器并使用以下方式进
await userManager.UpdateAsync(user);
Run Code Online (Sandbox Code Playgroud)
这正在按预期更新用户记录.我们可以对数据库进行持久更改,例如用户名,电话号码等.
我看到的问题是,有时更新角色而不是向用户添加其他角色时,它会删除所有角色.
在我们的ApplicationUser对象上,我们有这样的属性:
public virtual ICollection<IdentityUserRole<string>> Roles { get; set; } = new List<IdentityUserRole<string>>();
Run Code Online (Sandbox Code Playgroud)
因此,我们可以在客户端和服务器之间作为用户对象的一部分进行反弹.
我正在努力理解的是userManager.UpdateAsync(user);我所看到的方法的不一致行为.它显然有效,或者永远无法向用户添加任何角色.
到达服务器的对象每次提交时都会正确填充角色.基本流程是:
如何防止它删除角色?
谢谢!
UPDATE
正如@amirani的答案中详述的那样,我尝试过滤现有的列表.我已经设置AutoMapper完全忽略该属性.
.ForMember(x => x.Roles, opt => opt.Ignore());
Run Code Online (Sandbox Code Playgroud)
我现在只是像这样过滤(目前仅添加):
foreach (var userDtoRole in userDto.Roles)
{
if (user.Roles.FirstOrDefault(x => x.RoleId == userDtoRole) == null)
{
user.Roles.Add(new IdentityUserRole<string> {RoleId = userDtoRole, UserId = user.Id });
}
}
Run Code Online (Sandbox Code Playgroud)
其他角色永远不会添加到基础数据库.我已经确认在执行UpdateUser方法之前,正在更新的用户对象具有正确的角色列表.
当您致电时,await userManager.UpdateAsync(user);您正在更新用户模型及其所有相关数据。您需要将新角色添加到现有角色列表中,而不是创建新的空列表并添加新记录。
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |