我在 ASP MVC 5 应用程序中使用 ASP.NET 身份框架。在某些情况下,当前用户的角色成员身份正在发生变化,例如:
a) 用户支付了费用,因此它从 TrialUsers 中移除并添加到 Users(或任何类似的订阅更改,例如从 Standard 变为 Premium。
b) 对于站点管理员,有一个明确的 UI,他们可以在其中编辑角色成员资格。
编辑
与此同时,我发现了一个用例,它不仅带来不便,而且还存在安全漏洞,并且使授权无法使用。
c) 不识别角色成员资格的变化适用于身份框架的“记住我”功能。这意味着如果用户使用了记住我的功能(请不要建议我不要为我的用户提供此功能),那么角色成员资格更改将永远不会应用。 (内存到期)这意味着我不能有效地撤销任何成员(member)资格。这意味着我不能使用授权子系统(比如我的 Controller 或操作方法上的属性),我们又回到了石器时代:if(...)
结束编辑
所有更改都是通过使用提供的标准 API 完成的:
UserManager.AddToRolesAsync(...);
和
UserManager.RemoveFromRolesAsync(...);
似乎授权子系统和/或身份子系统直到用户下次登录时才识别出变化。特别是在场景a)中要求付费用户退出并登录非常不方便。据我所知ASP MVC 授权系统在没有注销->登录的情况下不会检测到角色更改。
请注意,我知道某些授权系统(如 Windows)以这种方式工作。仍然希望身份框架中有一个解决方案来跳过强制用户注销->登录。
是否有任何解决方法,或者我错过了什么?
最佳答案
只需重新登录用户即可重建用户 cookie:
SignInManager.SignIn(user, false, false);
关于c# - 如何在 ASP.NET 身份框架中刷新当前经过身份验证的用户的角色更改成员身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31311455/