帮助asp.net mvc授权

时间:2010-01-23 03:35:35

标签: asp.net-mvc security

假设您要显示包含许多元素的菜单...某些元素对于具有“管理员”角色的用户是独占的。 我知道如何使用

限制控制器方法
[Authorize(Roles = "Administrators")]

但我想找出一种根据用户角色显示特定html的方法

例如

<ul>
<li>Menu Item 1</li>
<% //if is admin%>
<li>Menu Item 2 (for admins only)</li>
</ul>

我该怎么做?

2 个答案:

答案 0 :(得分:3)

<ul>
<li>Menu Item 1</li>
<% if(Roles.IsUserInRole("Administrators")) { %>
<li>Menu Item 2 (for admins only)</li>
<% } %>
</ul>

答案 1 :(得分:2)

有两种方法可以做到这一点。如果您通过ViewData将列表项传递到View中,那么您的操作将如下所示:

public ViewResult Menu() {
  var list = new string[]{ "Menu Item 1" };
  if(HttpContext.User.IsInRole("Administrators"))
    list.Add(Menu Item 2 (for admins only)");
  ViewData["MenuItems"] = list;
  return View();
}

否则,您只需在ViewData中设置一个值即可向视图指示它是否应显示管理员值。

public ViewResult Menu() {
  ViewData["DisplayAdminItems"] = HttpContext.User.IsInRoles("Administrators");
}

您不希望使用“授权”过滤器,因为您希望允许非管理员访问该操作。我猜你也可以有两个动作,一个是授权过滤器,另一个没有。但是,这会强制所有链接并重定向到这些操作以决定使用哪个。