ASP .NET MVC Защита всех ресурсов - PullRequest
2 голосов
/ 01 апреля 2010

Как включить Аутентификацию на всем контроллере и отключить только для определенных методов действия. Я хочу аутентификацию для всех ресурсов. Если я напишу что-то подобное:

[Authorize]
public class HomeController : BaseController
{
    //This is public
    [UnAuthorized]
    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";
        return View();
    }
    //This is private resource
    public ActionResult PrivateResource()
    {
        return View();
    }
}

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

Ответы [ 2 ]

3 голосов
/ 01 апреля 2010

Организуйте свои контроллеры соответственно. Иметь базовый контроллер для всех аутентифицированных ресурсов, которые вы можете аннотировать с помощью атрибута [Authorize], а другой для общедоступных ресурсов.

[Authorize]
public abstract BaseAuthenticatedController : Controller
{ }

public abstract BaseController : Controller
{ }
1 голос
/ 01 апреля 2010

На основе найденного решения здесь Я написал код, который исправляет именно то, что я хотел.

Создание базы пользовательских атрибутов авторизации на основе AuthorizeAttribute и метода переопределения OnAuthorization:

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext != null)
        {
            object[] attributes = filterContext.ActionDescriptor.GetCustomAttributes(false);
            if (attributes != null)
            {
                foreach (var attribute in attributes)
                    if (attribute is UnAuthorizedAttribute)
                        return;
            }
        }
        base.OnAuthorization(filterContext);
    }

Я использую отражение здесь, чтобы распознать действие с атрибутом UnAuthorized. Я не знаю о проблемах производительности в этом случае, но это решает проблему полностью.

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