2010-01-23 84 views
0

假設您想要顯示一個包含許多元素的菜單......某些元素對於具有「管理員」角色的用戶是唯一的。 我知道如何使用幫助使用asp.net mvc授權

[Authorize(Roles = "Administrators")] 

限制控制器的方法,但我想找出一種方法來顯示特定HTML的事情取決於用戶角色

例如

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

我如何做thiis?

回答

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

好又簡單。唯一需要注意的是該視圖現在與角色耦合在一起,角色可能會或可能不會比與角色耦合的角色更好,但我希望它通常不會更好。 – 2010-01-23 03:46:44

2

兩種方法可以做到這一點。如果你通過列表​​項到通過ViewData的視圖那麼你的行動應該是這樣的:

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"); 
} 

您不希望使用授權篩選器,因爲您希望允許非管理員訪問該操作。我想或者你可以有兩個動作,一個是擁有Authorize過濾器,另一個沒有。但是,這會強制所有鏈接並重定向到這些操作以決定使用哪一個。

+0

我不明白我該如何使用這些解決方案......你能更清楚一點嗎?......在那些方法應該是什麼控制器? – ignaciofuentes 2010-01-23 14:26:18