0

我正在使用Visual Studio 2017,并且我有一个asp.NET核心MVC项目,其中一些用户具有多个角色。我想知道是否有一种方法可以将这些角色中的一个角色设置为该用户会话的剩余用户的唯一角色。当用户有多个角色时,是否有办法在asp.NET Core MVC中为会话的其余部分选择一个角色?

例如,如果用户属于两个角色,NormalUser和管理用户,他们希望使用的应用程序作为NormalUser,是有什么我可以设置让喜欢User.IsInRole(nameof(RoleNames.AdminUser))角色检查将返回false,但User.IsInRole(nameof(RoleNames.NormalUser))会返回true?

该框架是否提供任何此类功能?

+0

角色等同于Windows组。就像在Windows中一样,你不能选择“会话组”,你不能在MVC中选择“主动角色”。角色只是应用权限的一种方式。你想要做的是通常通过多个帐户完成。 –

+0

身份没有像内置的任何东西,但你可以肯定地补充说。如果你真的希望它是基于会话的,那么你必须添加一个字段到令牌并反序列化它或者修改数据库并将其保存到那里。 'UserSessionRole'类似的东西,并将其添加到用户模型。 – nurdyguy

回答

2

否。如果用户在某个角色中,则他们在该角色中。我认为,这里的主要问题是,您正在尝试将角色用于他们不适合的目的。如果你想要一个“管理员用户”才能够看到网站为“普通用户”,你可以简单地添加一些会话:

Session["ViewAsNormalUser"] = true; 

然后,你可以简单地做你的检查,如:

if (!User.IsInRole(nameof(RoleNames.AdminUser)) || Session["ViewAsNormalUser"] as bool? == true) 
{ 
    // do normal user thing 
} 
0

如果您想为当前会话的用户选择一个角色,则可以执行以下操作之一。

1-您可以使用索赔,并将此用户添加到管理权声明中,例如正常索赔。请参见下面的代码

await UserManager.AddClaimAsync(user, new Claim("RoleValue", "Admin or Normal")); 

该方案的优点是角色的设置会一直陪着你,如果你想改变的设置,你可以使用RemoveClaimAsync方法消除当前的索赔,并添加了新的要求。

2-等Chris Pratt提到你可以使用会话但也有当你想使用会话例如粘性会话社交性,你需要考虑的事情,当网络上的农场您的Web应用程序。

更可以在本文 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state#session-state

我希望帮助上找到。

相关问题