лучшие практики разрешений веб-системы - PullRequest
1 голос
/ 06 ноября 2011

У меня есть система asp.net MVC 3, для которой разные действия имеют разные разрешения.

Все разрешения управляются с помощью атрибутов, которые определяют необходимые права пользователя.

Я также хотел бы удалить все кнопки (или ссылки), на которые пользователю запрещено нажимать.

Есть ли способ сделать это, не делая много if-s в моих взглядах?

Спасибо.

1 Ответ

3 голосов
/ 06 ноября 2011

Есть ли способ сделать это, не делая много if-s в моих взглядах?

Вы можете написать собственные HTML-помощники, которые будут генерировать эти кнопки. Например:

@Html.Button("button text", "role1,role2");

Пользовательский помощник проверит, обладает ли текущий пользователь одной из требуемых ролей, и только в этом случае сгенерирует соответствующую кнопку.

Например:

public static class HtmlExtensions
{
    public static IHtmlString Button(this HtmlHelper htmlHelper, string buttonText, string roles)
    {
        var rolesSplit = (roles ?? string.Empty).Split(',');
        var user = htmlHelper.ViewContext.HttpContext.User;
        if (!user.Identity.IsAuthenticated || !rolesSplit.Any(user.IsInRole))
        {
            return MvcHtmlString.Empty;
        }

        var button = new TagBuilder("button");
        button.SetInnerText(buttonText);
        return new HtmlString(button.ToString());
    }
}
...