Если вы спрашиваете (извините, мне не совсем ясно) об условном отображении HTML-элементов на основе ролей, вы могли бы сделать что-то вроде этого:
@if (User.IsInRole("Administrators"))
{
@Html.ActionLink("Do Some Action", "DoAction", "SomeController")
}
Если вы не об этом, дайте мне знать.
Продолжение на основе вашего комментария:
Ваш вопрос меня интересует, и я немного покопался и обнаружил, что у Вивьен Шевалье есть интересная идея здесь , которая по сути позволяет вам написать что-то вроде этого:
@Html.ActionLinkAuthorized("The Privilege Zone", "ThePrivilegeZone", "Home", true)
в вашем View, а затем проверяет действие контроллера и либо отображает ссылку, либо нет.
В его примере с контроллером у вас есть такое действие:
[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;
}
}
}
Вместо того, чтобы вырезать / вставить весь этот код здесь, вы можете взглянуть на него и посмотреть пример приложения, которое он получил для этого. Я думаю, что особенно интересным для этого подхода является то, что представление может отображать эту ссылку PrivilegeZone, но знает только, что что-то еще определит, так ли это. Таким образом, предполагая, что вы получили новые требования, чтобы разрешить доступ к ссылке только людям, которые были «Администраторами» или «Владельцами», вы можете соответствующим образом изменить действие контроллера и не трогать код представления. Интересная идея, по крайней мере для меня.