ASP.NET MVC 3: Отображение ActionLink в зависимости от роли пользователя
Сайтостроение | создано: 04.06.2011 | опубликовано: 04.06.2011 | обновлено: 13.01.2024 | просмотров: 13648 | всего комментариев: 1
ActionLink рисует html-ссылку на конкретный ActionResult. Задался вопросом: А что если должна быть видно только пользователю, у которого есть определенная роль? Например, пользователь с правами “администратора” может видеть эту ссылку, а с правами “блоггера” – нет? Оказалось ничего сложного, просто написал расширение для HtmlHelper.
Расширяем HtmlHelper
Создаем класс HtmlExtentions, в который будем писать своё расширение для HtmlHelper и пишем само расширение:
public static class HtmlExtentions { #region Admin Links /// <summary> /// Рисует ссылку если у пользователя есть роль /// </summary> /// <param name="html">htmlHelper</param> /// <param name="requiredRoleName">название роли</param> /// <param name="text">текст ссылки</param> /// <param name="actionName">название ActionResult</param> /// <param name="controllerName">название Controller</param> /// <returns>secure ActionLink</returns> public static MvcHtmlString SUAdminLinkAction(this HtmlHelper html, string requiredRoleName, string text, string actionName, string controllerName) { string htmlstring = string.Empty; HttpContext context = HttpContext.Current; MvcHandler handler = context.Handler as MvcHandler; if (handler.RequestContext.HttpContext.User.Identity.IsAuthenticated) { if (handler.RequestContext.HttpContext.User.IsInRole(requiredRoleName)) { var url = new UrlHelper(html.ViewContext.RequestContext); var tagBuilder = new TagBuilder("a"); tagBuilder.SetInnerText(text); tagBuilder.MergeAttribute("href", url.Action(actionName, controllerName)); htmlstring = tagBuilder.ToString(TagRenderMode.Normal); } } return MvcHtmlString.Create(htmlstring); } #endregion }
Если у Вас возникнут вопросы, то я с радостью отвечу на них. А также принимаются рекомендации и замечания, дополнения и здоровая критика в комментарии. Дело в том, что я в MVC новичок и готов учиться.
Комментарии к статье (1)
Спасибо, пригодилось. Добавил только несколько ролей для доступа к ссылке.