ASP.Net MVC: IAuthorizationFilter / Атрибут предпочтительной проверки безопасности для входа в систему? - PullRequest
3 голосов
/ 15 июня 2009

Является ли IAuthorizationFilter в сочетании с атрибутом предпочтительным способом проверки, вошел ли пользователь в систему до того, как контроллер запустит свой курс?

Поскольку я новичок в MVC, я пытался понять, как справляться с ситуациями в WebForms. Тот, с которым я столкнулся вчера, проверяет, может ли пользователь просматривать страницу или нет, в зависимости от того, вошел ли он в систему или нет. Когда я брал свой проект и «превращал» его в проект MVC, я немного не мог понять, как решить эту ситуацию.

В версии WebForms я использовал базовую страницу, чтобы проверить, вошел ли пользователь в систему:

if (State.CurrentUser == null)
{
  State.ReturnPage = SiteMethods.GetCurrentUrl();
  Response.Redirect(DEFAULT_LOGIN_REDIRECT);
}

Что я нашел, так это:

[AttributeUsage(AttributeTargets.Method)]
public sealed class RequiresAuthenticationAttribute : ActionFilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext context)
    {
        if (State.CurrentUser ==  null)
        {
            context.Result = 
              new RedirectToRouteResult
              (
                "Login", 
                new RouteValueDictionary
                (
                  new 
                  { 
                    controller = "Login", 
                    action = "Error", 
                    redirect = SiteMethods.GetCurrentUrl()
                  }
                )
              ); 
        }
    }
} 

Тогда я просто бью этот атрибут по любому методу контроллера отдачи, и жизнь хороша. Вопрос в том, является ли это предпочтительным и / или лучшим способом сделать это?

Ответы [ 2 ]

2 голосов
/ 15 июня 2009

Не изобретай велосипед. Инфраструктура MVC уже включает AuthorizeAttribute, который обрабатывает некоторые тонкости, отсутствующие в коде, который вы вставили здесь, например, кэширование. Просто используйте это. Но да, атрибуты - это путь.

1 голос
/ 15 июня 2009

Обеспечение безопасности действий контроллера с использованием FilterAttributes - хороший путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...