C# 切换当前角色-.NET核心标识

C# 切换当前角色-.NET核心标识,c#,asp.net-core,identity,asp.net-core-3.1,C#,Asp.net Core,Identity,Asp.net Core 3.1,我正在使用带有标识的.NETCore3.1 我有一个管理员用户具有roles={admin,Customer},其他用户具有roles={user}。 所以我希望管理员可以切换角色,在角落里有一个下拉列表,如“切换到客户视图”,然后将当前角色切换到客户,这样他就可以查看客户视图 我一直在寻找,我发现,这是我想要的,但解决方案是使用cookies。 我试过了,你可以在chrome调试控制台中编辑cookies,这样任何人都可以更改为Admin 是否有一个选项可以实现这一点,而无需cookie 这是

我正在使用带有标识的.NETCore3.1

我有一个管理员用户具有
roles={admin,Customer}
,其他用户具有
roles={user}
。 所以我希望管理员可以切换角色,在角落里有一个下拉列表,如“切换到客户视图”,然后将当前角色切换到客户,这样他就可以查看客户视图

我一直在寻找,我发现,这是我想要的,但解决方案是使用cookies。 我试过了,你可以在chrome调试控制台中编辑cookies,这样任何人都可以更改为Admin

是否有一个选项可以实现这一点,而无需cookie

这是我在cookies中使用的设置:

HttpContext.Response.Cookies.Append("currentRole", "Admin",
    new CookieOptions { Expires = DateTime.Now.AddYears(10), IsEssential = true, 
    SameSite = SameSiteMode.Lax, Secure = true });
这是为了得到它:

string currentRole = HttpContext.Request.Cookies["currentRole"];

使用cookie存储这样的内容作为首选项似乎没有问题,只要您不是将其作为后端返回内容的唯一因素


将cookie视为一种请求,而不是一种权利:“请向我展示管理体验”或“请向我展示客户体验”。当您的后端接收到该请求时,您可以像现在一样查看通过cookie传入的首选项,然后对照他们的授权进行检查,以查看是否遵守该请求,并继续使用您用于提供该体验的任何逻辑。如果客户传入“管理员”cookie请求,但他们不担任“管理员”角色,您可以拒绝该请求。

使用cookie存储类似内容作为首选项似乎没有问题,只要您不是将其作为后端返回内容的唯一因素


将cookie视为一种请求,而不是一种权利:“请向我展示管理体验”或“请向我展示客户体验”。当您的后端接收到该请求时,您可以像现在一样查看通过cookie传入的首选项,然后对照他们的授权进行检查,以查看是否遵守该请求,并继续使用您用于提供该体验的任何逻辑。如果客户传入“管理员”cookie请求,但他们不在“管理员”角色中,您可以拒绝该请求。

角色本质上是一组权利或权限。所以管理员用户总是拥有这三个角色,因为他总是被允许做这三个角色都允许做的事情。如果您需要在更精细的级别上控制用户体验,那么您需要在角色之上添加一些额外的机制。角色本质上是一组权利或权限。所以管理员用户总是拥有这三个角色,因为他总是被允许做这三个角色都允许做的事情。如果您需要在更精细的级别上控制用户体验,那么您需要在角色之上添加一些额外的机制。