亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ASP.NET Identity UserManager UpdateAsync 刪除角色

ASP.NET Identity UserManager UpdateAsync 刪除角色

C#
30秒到達戰場 2021-11-28 19:56:22
我們的應用程序中有一個屏幕,允許管理員角色的成員編輯用戶帳戶詳細信息。最終,任何用戶對象都會發送到服務器并使用以下方法進行更新:await userManager.UpdateAsync(user);這在更新用戶記錄時按預期工作。我們可以進行持久化到數據庫的更改,例如用戶名、電話號碼等。我看到的問題是,有時更新角色而不是向用戶添加其他角色時,它會刪除所有角色。在我們的ApplicationUser對象上,我們有一個這樣的屬性:public virtual ICollection<IdentityUserRole<string>> Roles { get; set; } = new List<IdentityUserRole<string>>();因此,我們可以將客戶端和服務器之間的角色作為用戶對象的一部分進行反彈。我正在努力理解的是userManager.UpdateAsync(user);我所看到的方法的不一致行為。它顯然有效,否則永遠無法向用戶添加任何角色。每次提交時,到達服務器的對象都會正確填充角色?;玖鞒淌牵禾砑咏巧⑻峤唤巧_添加到用戶添加其他角色并提交刪除所有角色如何防止它刪除角色?謝謝!
查看完整描述

2 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

當您調用時,await userManager.UpdateAsync(user);您正在更新用戶模型及其所有相關數據。您需要將新角色添加到現有角色列表中,而不是創建新的空列表并添加新記錄。


查看完整回答
反對 回復 2021-11-28
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

嘗試下面的代碼來添加新角色


private readonly ApplicationDbContext _context;

    private readonly UserManager<ApplicationUser> _userManager;

    private readonly RoleManager<IdentityRole> _roleManager;

    public HomeController(ApplicationDbContext context

        , UserManager<ApplicationUser> userManager

        , RoleManager<IdentityRole> roleManager)

    {

        _context = context;

        _userManager = userManager;

        _roleManager = roleManager;

    }

    public async Task<IActionResult> CreateUserAndRole()

    {

        await _userManager.CreateAsync(new ApplicationUser { UserName = "[email protected]", Email = "[email protected]" });

        await _roleManager.CreateAsync(new IdentityRole {  Name = "Admin" });

        await _roleManager.CreateAsync(new IdentityRole { Name = "Administrator" });

        return Ok();

    }

    public async Task<IActionResult> AddAdminRoleToUser()

    {

        ApplicationUser user = _context.Users.FirstOrDefault(u => u.UserName == "[email protected]");

        var role = await _roleManager.FindByNameAsync("Admin");

        user.Roles.Add(new IdentityUserRole<string> { RoleId = role.Id, UserId = user.Id });

        await _userManager.UpdateAsync(user);

        return Ok();

    }

    public async Task<IActionResult> AddAdministratorRoleToUser()

    {

        ApplicationUser user = _context.Users.FirstOrDefault(u => u.UserName == "[email protected]");

        var role = await _roleManager.FindByNameAsync("Administrator");

        user.Roles.Add(new IdentityUserRole<string> { RoleId = role.Id, UserId = user.Id });

        await _userManager.UpdateAsync(user);

        return Ok();

    }


查看完整回答
反對 回復 2021-11-28
  • 2 回答
  • 0 關注
  • 276 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號