Ограничение доступа к страницам в ASP.NET MVC

пятница, 6 марта 2009 г.,

Предположим, нам необходимо ограничить доступ к определенной странице.
Например, при попытке открыть страницу по ссылке "F1" (см. предыдущий пример) запрашивать имя и пароль.
Для этого надо определить атрибут Authorize у метода TestController.Help:

1[Authorize]
2public ActionResult Help()
3{
4    ViewData["Text"] = "help";
5    return View();
6}

Теперь при первом обращении к http://localhost:5545/Test/Help будет происходить перенаправление на страницу http://localhost:5545/Account/Login?ReturnUrl=%2fTest%2fHelp
После ввода корректного имени и пароля будет выполнено перенаправление на страницу http://localhost:5545/Test/Help.

Как это работает? ASP.NET MVC считывает у метода атрибут(ы) Authorize примерно следующим образом:


1foreach (var in this.GetMethodAttributes<AuthorizeAttribute>("About"))
2    System.Diagnostics.Trace.WriteLine(a);

...


1public static class AtttributeHelper
2{
3    public static IEnumerable<T> GetMethodAttributes<T>(this object obj, string name)
4    {
5        if (string.IsNullOrEmpty(name))
6            return null;
7        Type type = obj is Type ? (Type)obj : obj.GetType();
8        var ma = type.GetMember(name);
9        return (ma.Length == 0)
10            null
11            : ma.First().GetCustomAttributes(typeof(T), true).Cast();
12    }
13}


P.S.
Для регистрации на сайте должна быть создана БД (см. здесь)

Комментариев нет: