0

我正在为 Html.RenderAction 创建一个自定义 HtmlHelper 扩展。我的父视图将包含许多不同的局部视图,这些视图将通过调用 Html.Renderaction 来呈现。但是管理员可以对角色的部分视图进行排序,或者他可以完全停用整个应用程序的操作所以我计划为 Html.RenderAction 提供一个扩展方法,该方法将依次检查角色并查看是否角色有权访问特定操作。这个角色到动作的映射是在 xml 中用餐的,我打算只在内存数据结构中加载这个 xml 一次。并让 html 帮助程序扩展查看该数据结构。这是一个好方法吗?还有更好的方法吗?

 @section column2 {
        @{Html.RenderActionIfIfAllowed("DashboardItem_Users", "DashBoard",User);}
        }

        @section column3 {
        @{Html.RenderActionIfIfAllowed("DashboardItem_Orders", "DashBoard", User);}
        }

我必须渲染上述部分视图。所以我创建了一个名为 Html.RenderActionIfIfAllowed 的 html 帮助程序扩展。

public static class HtmlHelperExtensions 
{
   public static void RenderActionIfIfAllowed<TModel>(this HtmlHelper<TModel> htmlHelper, string actionName, string controllerName, IPrincipal user)
    {
       //We can use the layour manager class to check if a particular role has access to an action and also if the action is active.
       //Hard coding here just for demo purpose
        if (user.IsInRole("Admin") && actionName != "DashboardItem_Users")
        {
            System.Web.Mvc.Html.ChildActionExtensions.RenderAction(htmlHelper, actionName, controllerName);
        }
        else if (user.Identity.IsAuthenticated && !user.IsInRole("Admin"))
        {
            System.Web.Mvc.Html.ChildActionExtensions.RenderAction(htmlHelper, actionName, controllerName);
        }
    }

}

这样做的原因是因为我们希望根据视图是否处于活动状态来动态地向用户显示或不向用户显示 aprtial 视图。我们将读取一个 xml 文件,该文件将说明视图是否对用户处于活动状态并相应地呈现它

4

1 回答 1

0

我曾经为此创建 ViewModel 并设置 bool 属性

public class DashBoardViewModel{

public DashBoard dashBoard{get;set;}

bool showItemDashBoard{get;set;}

bool showOrderDashBoard{get;set;}

}

在控制器中,我验证用户角色并设置这些布尔属性。

在视图中

if(Model.showItemDashBoard){
  @Html.RenderAction("Action","Controller")
}
于 2013-02-26T05:29:12.977 回答