Session 在ASP.NETMVC5中基于用户角色显示按钮

Session 在ASP.NETMVC5中基于用户角色显示按钮,session,asp.net-mvc-5,user-roles,Session,Asp.net Mvc 5,User Roles,我必须根据角色在视图中显示按钮,比如说我有管理员用户和默认用户这样的角色,其中管理员用户可以看到删除、修改和添加按钮,但默认用户只能搜索。当前,当用户登录时,我捕获用户ID并将用户ID发送到数据库以获取用户角色,并将这些角色存储在会话中。在视图中,使用以下代码检索角色值 @if (Session["UserRole"].ToString() == "Admin") { //show delete,modify and cre

我必须根据角色在视图中显示按钮,比如说我有管理员用户和默认用户这样的角色,其中管理员用户可以看到删除、修改和添加按钮,但默认用户只能搜索。当前,当用户登录时,我捕获用户ID并将用户ID发送到数据库以获取用户角色,并将这些角色存储在会话中。在视图中,使用以下代码检索角色值

@if (Session["UserRole"].ToString() == "Admin")
                {
                    //show delete,modify and create buttons
                }
但在我的产品中,代码将托管在多个服务器上,请求可以发送到任何服务器


我的问题是,在会话中存储角色是否是一种好的做法,是否有更好的方法来解决我的需求。如果我在有多台服务器的生产环境中使用会话,会话方法是否有效?

此解决方案可能存在一些性能问题,因此我建议在操作方法中获得角色,并将其存储在ViewData中


但我认为最好的解决方案是用这个方法创建一个局部视图,并在该方法中创建一个authorize标记

我不想调用DB来获取每个请求上的角色,使用ViewBag时,该值将仅用于一个请求,因此无法完成,而使用部分视图时,我不认为这是正确的解决方案,因为我有一个按钮,我必须根据角色隐藏或显示,所以我不能只为按钮创建局部视图。