asp.net - 如何根据MVC3中属性中定义的角色隐藏选项卡?

标签 asp.net asp.net-mvc-3 attributes roles

在 MVC3 网站的默认安装中,左上角创建了选项卡。我想根据当前用户是否有权访问索引 ViewResult 来隐藏/显示这些选项卡。 ViewResult 允许的角色由属性定义。有没有办法获取 ViewResult 的角色列表?

最佳答案

如果您要问(抱歉,我不太清楚)关于基于角色的 HTML 元素的条件显示,您可以执行以下操作:

@if (User.IsInRole("Administrators"))
{
   @Html.ActionLink("Do Some Action", "DoAction", "SomeController")
}

如果这不是你要问的,请告诉我。

根据您的评论跟进:

你的问题引起了我的兴趣,我查了一下,发现 Vivien Chevallier 有一个有趣的想法 here这基本上可以让你写这样的东西:
@Html.ActionLinkAuthorized("The Privilege Zone", "ThePrivilegeZone", "Home", true)
在您的 View 中,然后检查 Controller 操作并呈现或不呈现链接。

在他的 Controller 示例中,您有这样的操作:
[Authorize(Roles = "Administrator")]
public ActionResult ThePrivilegeZone()
{
    return View();
}

(我想这里的关键是你的 View 不知道关于“管理员”的深蹲,而是依靠扩展代码来完成这里的繁重工作:
public static MvcHtmlString ActionLinkAuthorized(
   this HtmlHelper htmlHelper, 
   string linkText, string actionName, string controllerName, 
   RouteValueDictionary routeValues, 
   IDictionary<string, object> htmlAttributes, bool showActionLinkAsDisabled)
{
   if (htmlHelper.ActionAuthorized(actionName, controllerName))
   {
      return htmlHelper.ActionLink(
         linkText, 
         actionName, controllerName, routeValues, htmlAttributes);
   }
   else
   {
      if (showActionLinkAsDisabled)
      {
         TagBuilder tagBuilder = new TagBuilder("span");
         tagBuilder.InnerHtml = linkText;
         return MvcHtmlString.Create(tagBuilder.ToString());
      }
      else
      {
         return MvcHtmlString.Empty;
      }
   }
}

与其在此处剪切/粘贴所有代码,您还可以查看它并查看他为此获得的示例应用程序。我认为这种方法特别有趣的是, View 可以显示 PrivilegeZone 链接,但只知道其他东西将决定是否是这种情况。因此,假设您有新的要求,只允许“管理员”或“所有者”访问链接,您可以相应地修改 Controller 操作,而不是触摸 View 代码。有趣的想法,至少对我来说。

关于asp.net - 如何根据MVC3中属性中定义的角色隐藏选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7286299/

相关文章:

c# - 如何使nodejs代码在asp.net core(带有JavascriptService)应用程序中调用csharp代码?

asp.net-mvc-3 - 如何使用 ravendb 在 mvc 3 应用程序中设置 Multi-Tenancy

asp.net-mvc-3 - 在 MVC3 区域中使用 Web 表单

spring-mvc - 具有 session 属性的 mvc Controller 测试

c# - 该列在选择列表中无效,因为该列未包含在聚合函数或GROUP BY子句中

c# - 如何在 javascript 中访问 session 对象成员变量后面的 asp.net 代码?

c# - 多个服务的多个组件

asp.net-mvc-3 - 有没有办法减少 TinyMCE 文件和文件夹的数量?

ruby-on-rails - 为什么不能使用符号而不是字符串来访问 Rails 模型属性?

ruby-on-rails-3 - 管理员权限的复选框 bool 值