2011-07-14 2 views
11

Istnieje atrybut autoryzacji na moim kontenerze, co oznacza, że ​​zawiera wszystkie moje działania. Chcę wykluczyć niektóre akcje z tego atrybutu (te akcje będą dostępne dla anonimowych użytkowników). Czy to możliwe?Wyklucz niektóre akcje z Authorize w ASP.net MVC

[Authorize] 
public class TestController : Controller 
{ 
    public ActionResult Index() 
    { 
    ... 
    } 
    ... 

    //available by anonymous 
    public ActionResult Test() 
    { 
    ... 
    } 
} 

Odpowiedz

11

można przyjąć podejście przedstawione w niniejszym blogu tworzenia atrybut AllowAnonymous i umieszczenie tego atrybutu na działaniach yo u chcą, aby wykluczyć:

http://blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx

To będzie vNext ram na drodze.

+0

Zaktualizowaną wersję mojego bloga można znaleźć na stronie http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and -the-new-allowanonymous-attribute.aspx – RickAndMSFT

+1

[AllowAnonymous] to sposób na to, jak to już jest w MVC 5 – Adamy

4

Możesz umieścić atrybut na górze ograniczonych akcji i pozostawić pozostałe (te, w których chcesz zezwolić na anonimowy dostęp).

Wyjąć go także z najwyższej półki.

9

Umieszczenie atrybut [Authorize] na kontrolerze jest po prostu skrót na umieszczenie go na każde działanie, dzięki czemu kod jest logicznie równoważne

// No [Authorize] here 
public class TestController : Controller 
{ 
    [Authorize] 
    public ActionResult Index() 
    { 
     // code here... 
    } 

    [Authorize] 
    public ActionResult Test() 
    { 
     // code here... 
    } 
} 

Prawdopodobnie można zobaczyć, gdzie idę z tym - usunąć atrybut z kontrolera, i umieścić ją na konkretnych działań, które mają być ograniczone:

// No [Authorize] here 
public class TestController : Controller 
{ 
    [Authorize] 
    public ActionResult Index() 
    { 
     // code here... 
    } 

    // no [Authorize] here either, so anonymous users can access it... 
    public ActionResult Test() 
    { 
     // code here... 
    } 
}