ASP.NET MVC 3: Отображение ActionLink в зависимости от роли пользователя
Сайтостроение | создано: 04.06.2011 | опубликовано: 04.06.2011 | обновлено: 13.01.2024 | просмотров: 13934 | всего комментариев: 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)
Спасибо, пригодилось. Добавил только несколько ролей для доступа к ссылке.