Я не верю, что существует простое решение, позволяющее сделать это без отражения Controller
, получения Action
и проверки AuthorizationFilters
.
С учетом сказанного, альтернативное решение можетсоздать перегрузку метода расширения для Html.ActionLink
, которая принимает имя роли и проверяет User.IsInRole(roleName)
.Выводить ссылку можно только в том случае, если у пользователя есть доступ к указанной роли.
Примерно так:
public static class EntentionMethods
{
public static MvcHtmlString ActionLink(this HtmlHelper helper, string linkText, string actionName, string controllerName, string roleName)
{
if (!helper.ViewContext.RequestContext.HttpContext.User.IsInRole(roleName))
{
return MvcHtmlString.Empty;
}
return helper.ActionLink(linkText, actionName, controllerName);
}
}
Не очень красиво, как вы могли надеяться, но это часто служит нуждам