我们正在Web应用程序中使用“角色”。在此应用程序中,我们拥有可以动态删除/向用户添加角色的管理员。除了一个例外,这很好用。我们具有根据用户角色呈现的UI元素:
@if (User.IsInRole(Roles.Admin))
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="ApplicationAdministration" asp-controller="Administration" asp-action="Index">Administration</a>
</li>
}
如果管理员像这样从用户中删除角色:
var dbAccount = await _userManager.FindByIdAsync(id);
var roles = await _userManager.GetRolesAsync(dbAccount);
await _userManager.RemoveFromRolesAsync(dbAccount, roles);
如果该用户仍处于登录状态,则更改不会应用到该用户的会话中。换句话说,受影响的用户将需要先手动注销,否则他们仍然可以看到呈现的操作链接。
如何防止这种情况?还是这样的东西可以接受?