2011-09-02 37 views

回答

10

如果你問(對不起,是不完全清楚,我)約基於角色的HTML元素的條件顯示,你可以做這樣的事情:

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

如果不是你在問什麼,讓我知道。


後續根據您的評論:

你的問題讓我感興趣的,我做了一個小閒逛,發現費雯麗CHEVALLIER有一個有趣的想法here基本上可以讓你寫的東西,像這樣:

@Html.ActionLinkAuthorized("The Privilege Zone", "ThePrivilegeZone", "Home", true)

在您查看

,然後這個檢查控制器的動作,要麼呈現一個鏈接或沒有。

在他的控制例子,你有一個這樣的動作:

[Authorize(Roles = "Administrator")] 
public ActionResult ThePrivilegeZone() 
{ 
    return 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; 
     } 
    } 
} 

不是剪切/粘貼代碼的全部,在這裏,你可以看看,看看他有該示例應用程序,我認爲有什麼特別有趣的這個方法是查看可能是顯示PrivilegeZone鏈接,但只知道別的東西會確定是否是這種情況。因此,假設你有新的要求,只允許「管理員」或「所有者」的人訪問鏈接,則可以相應地修改控制器操作,而不是觸摸視圖代碼。有趣的想法,至少對我來說。

+0

對不好寫的問題。這幾乎是我正在尋找的東西,除了聲明角色(如管理員)之外,還可以獲取已通過操作屬性授予操作權限的角色列表?這樣我可以在一個屬性中設置角色,鏈接將自動顯示或不顯示。 – Dale

+0

查看我添加到我的答案中的信息是否有幫助。 – itsmatt

+0

這非常有幫助。謝謝。 – Dale

相關問題