gpt4 book ai didi

c# - 基于当前用户的 "Role"动态构建 ASP.NET MVC 母版页菜单

转载 作者:可可西里 更新时间:2023-11-01 07:45:05 25 4
gpt4 key购买 nike

我见过一些类似的问题,但没有一个看起来像我想要做的。

这是我当前的实现,没有任何安全措施:

<div id="menucontainer">
<ul id="menu">
<li><%= Html.ActionLink("Main List", "Index", "AController")%></li>
<li><%= Html.ActionLink("Product List", "Index", "BController")%></li>
<li><%= Html.ActionLink("Company List", "Index", "CController")%></li>
<li><%= Html.ActionLink("User List", "Index", "DController")%></li>
</ul>
</div>

这很好,上面的工作。我在 CController 和 DController 的 Actions 上设置了 [Authorize] Attributes 以防止未经授权的访问 - 但我想从没有正确角色的用户的菜单中删除这些项目,因为当他们看到它并单击在上面,它告诉他们他们没有权限,他们会想要它。如果他们不知道它在那里,那对每个相关人员都更好...

像这样的东西最终是我试图达到的目标,但我正在寻找更多 MVC 风格的方法,其中“ View ”是“愚蠢的”:

<div id="menucontainer">
<ul id="menu">
<li><%= Html.ActionLink("Main List", "Index", "AController")%></li>
<li><%= Html.ActionLink("Product List", "Index", "BController")%></li>
<% If(Role = Roles.Admin) { %>
<li><%= Html.ActionLink("Company List", "Index", "CController")%></li>
<li><%= Html.ActionLink("User List", "Index", "DController")%></li>
<% } %>
</ul>
</div>

最佳答案

我做过这样的事情:

  • 为我的 Controller 使用一个公共(public)基类('layer supertype')
  • 在 BaseController 中,覆盖 OnActionExecuted(您也可以为此定义一个 ActionFilter 属性)

像这样:

    protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
// build list of menu items based on user's permissions, and add it to ViewData
IEnumerable<MenuItem> menu = BuildMenu();
ViewData["Menu"] = menu;
}

在母版页中:

    <% var model = ViewData["Menu"] as IEnumerable<MenuItem>; %>
<% Html.RenderPartial("Menu", model); %>

(注意:实际上,我有一个包含菜单模型的 MasterViewModel)

关于c# - 基于当前用户的 "Role"动态构建 ASP.NET MVC 母版页菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2203320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com