gpt4 book ai didi

c# - 用户 IsInRole 仅在从网站登录和注销后才有效

转载 作者:太空宇宙 更新时间:2023-11-03 12:02:48 24 4
gpt4 key购买 nike

我在我的 Controller 代码和我的共享 _Layout View 中添加和删除角色的用户,我正在使用 User.IsInRole 相应地检查和删除链接,但只有当用户退出网站然后 User.IsInRole 返回时它才有效结果正确吗?

有没有办法重新加载 _Layout 页面以使其正确抓取数据?

改变角色的 Controller 代码

  _userManager.RemoveFromRole(obj.strUserID, "Consumer");
_userManager.AddToRole(obj.strUserID, "Provider");
_context.SaveChanges();
return View("Success");

Shared _Layout View 被多个页面使用

  if (!User.IsInRole("Provider"))
{
<li>@Html.ActionLink("Become a Member", "Memmber", "CustProfile")</li>
}

有一次,我删除并向用户添加新角色,我希望 _Layout.cstml 显示正确的链接,但它没有。如果我注销并重新登录,它工作正常。

有没有办法解决这个问题?

最佳答案

用户在注销前会被缓存,因此您必须重新签名。请使用以下代码再次签名。此外,请确保重定向它们而不是 View,以便重新加载页面。

 private ApplicationSignInManager _signInManager;

public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ??
HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}

更改角色后添加如下代码:

  var userinDb = _context.Users.Find(UserID);
await SignInManager.SignInAsync(userinDb, true,false);
return RedirectToAction("Success");

关于c# - 用户 IsInRole 仅在从网站登录和注销后才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56367666/

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