当用户具有多个角色时,是否可以在 asp.NET Core MVC 中为会话的剩余部分选择一个角色?
When a user has multiple roles, is there a way to pick one role for the remainder of the session in asp.NET Core MVC?
我正在使用 Visual Studio 2017,我有一个 asp.NET 核心 MVC 项目,其中一些用户具有多个角色。我想知道是否有一种方法可以将这些角色中的一个设置为用户会话剩余部分的唯一角色。
例如,如果用户属于两个角色,NormalUser 和 AdminUser,并且他们想以 NormalUser 的身份使用该应用程序,我是否可以设置一些东西,以便像 User.IsInRole(nameof(RoleNames.AdminUser))
这样的角色检查将 return 错误,但是 User.IsInRole(nameof(RoleNames.NormalUser))
会 return 正确吗?
框架是否提供任何此类功能?
没有。如果用户处于角色中,则他们处于该角色中。我认为,这里的主要问题是您正试图将角色用于不应该达到的目的。如果您希望 "admin user" 能够将站点视为 "normal user",您可以简单地向会话中添加一些内容:
Session["ViewAsNormalUser"] = true;
然后,您可以像这样简单地进行检查:
if (!User.IsInRole(nameof(RoleNames.AdminUser)) || Session["ViewAsNormalUser"] as bool? == true)
{
// do normal user thing
}
如果您想 select 为当前会话的用户分配一个角色,您可以执行以下操作之一。
1- 您可以使用 Claims 并将此用户添加到 Admin Claims 例如或 Normal Claims。看下面的代码
await UserManager.AddClaimAsync(user, new Claim("RoleValue", "Admin or Normal"));
这样做的好处是角色设置将始终伴随您,如果您想更改设置,您可以使用 RemoveClaimAsync 方法删除当前声明并添加新声明。
2- 正如 Chris Pratt 提到的,您可以使用会话,但是当您想要使用会话时,您需要考虑一些事情,例如,当您的网络应用程序在网络场上时,粘性会话社交性。
更多内容可在这篇文章中找到
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state#session-state
希望对你有所帮助。
我正在使用 Visual Studio 2017,我有一个 asp.NET 核心 MVC 项目,其中一些用户具有多个角色。我想知道是否有一种方法可以将这些角色中的一个设置为用户会话剩余部分的唯一角色。
例如,如果用户属于两个角色,NormalUser 和 AdminUser,并且他们想以 NormalUser 的身份使用该应用程序,我是否可以设置一些东西,以便像 User.IsInRole(nameof(RoleNames.AdminUser))
这样的角色检查将 return 错误,但是 User.IsInRole(nameof(RoleNames.NormalUser))
会 return 正确吗?
框架是否提供任何此类功能?
没有。如果用户处于角色中,则他们处于该角色中。我认为,这里的主要问题是您正试图将角色用于不应该达到的目的。如果您希望 "admin user" 能够将站点视为 "normal user",您可以简单地向会话中添加一些内容:
Session["ViewAsNormalUser"] = true;
然后,您可以像这样简单地进行检查:
if (!User.IsInRole(nameof(RoleNames.AdminUser)) || Session["ViewAsNormalUser"] as bool? == true)
{
// do normal user thing
}
如果您想 select 为当前会话的用户分配一个角色,您可以执行以下操作之一。
1- 您可以使用 Claims 并将此用户添加到 Admin Claims 例如或 Normal Claims。看下面的代码
await UserManager.AddClaimAsync(user, new Claim("RoleValue", "Admin or Normal"));
这样做的好处是角色设置将始终伴随您,如果您想更改设置,您可以使用 RemoveClaimAsync 方法删除当前声明并添加新声明。
2- 正如 Chris Pratt 提到的,您可以使用会话,但是当您想要使用会话时,您需要考虑一些事情,例如,当您的网络应用程序在网络场上时,粘性会话社交性。
更多内容可在这篇文章中找到 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state#session-state
希望对你有所帮助。