asp.net mvc - ограничить доступ к веб-страницам - PullRequest
3 голосов
/ 27 марта 2010

Привет, в моем приложении asp.net mvc я хотел бы разрешить доступ к некоторым страницам только после успешной авторизации пользователя. Я уже создал пользовательский членство провайдера, и это прекрасно работает. Как я могу в веб-конфигурации создать такое правило - например, для всех страниц в ~ Admin / folder? Я не хочу создавать на каждом действии контроллера код проверки. На данный момент в моем web.config есть следующее утверждение:

    <location path="~/Admin"> 
<system.web>
  <authorization>
    <deny users="?"/> 
  </authorization>
</system.web>

но это не работает.

1 Ответ

2 голосов
/ 27 марта 2010

У логики авторизации в конфигурационных файлах есть один большой недостаток: она не может быть легко проверена модулем, и что-то столь важное, как аутентификация , должно быть проверено модулем. В связи с этим я бы порекомендовал вам написать собственный фильтр авторизации, который можно использовать для украшения базового контроллера для всех действий администратора, требующих аутентификации:

[AttributeUsage(
    AttributeTargets.Method | AttributeTargets.Class, 
    Inherited = true
)]
public class RequiresAuthenticationAttribute 
    : FilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new RedirectResult(
                string.Format("{0}?ReturnUrl={1}", 
                    FormsAuthentication.LoginUrl, 
                    filterContext.HttpContext.Request.Url.AbsoluteUri
                )
            );
        }
    }
}

А твой админ контроллер:

[RequiresAuthentication]
public class AdminController : Controller
{
    // .. some actions that require authorized access
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...