假设您要显示包含许多元素的菜单...某些元素对于具有“管理员”角色的用户是独占的。 我知道如何使用
限制控制器方法[Authorize(Roles = "Administrators")]
但我想找出一种根据用户角色显示特定html的方法
例如
<ul>
<li>Menu Item 1</li>
<% //if is admin%>
<li>Menu Item 2 (for admins only)</li>
</ul>
我该怎么做?
答案 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");
}
您不希望使用“授权”过滤器,因为您希望允许非管理员访问该操作。我猜你也可以有两个动作,一个是授权过滤器,另一个没有。但是,这会强制所有链接并重定向到这些操作以决定使用哪个。