W ASP.NET MVC istnieją 4 rodzaje filtrów.
- Filtry autoryzujące
- Filtry wyjątku
- Filtry akcji (przed akcją i po akcji)
- Filtry rezultatu (przed i po wyniku akcji)
Poniżej omówię filtry autoryzujące. Filtrów używa się jak atrybutów i dekoruje się nimi metody akcji.
Filtry autoryzujące są uruchamiane jako pierwsze przez uruchomieniem innych filtrów lub metod akcji.
- Pierwsza metoda umożliwia Nam stworzenie własnej implementacji interfejsu IAuthorizationFilter i metody OnAuthorizationContext.
Używanie tej metody nie jest zalecane chyba, że dokładnie wiesz co robisz. Głównie dlatego, że wymyślanie własnych metod zabezpieczeń jest ryzykowne.
- Drugą metodą jest dziedziczenie po klasie AuthorizeAttribute. Klasa znajduje się w przestrzeni System.Web.Mvc. Piszę to ponieważ, w przestrzeni System.Web istnieje taka sama klasa ale z innymi metodami.
Poniżej kod przedstawiąjący nadpisanie metody AuthorizeCore. Celem jest sprawdzenie czy dany użytkownik może używać danej akcji.
public class AutoryzacjaUlubionych : AuthorizeAttribute { private string uzytkownik; public AutoryzacjaUlubionych(string nazwaUzytkownika) { this.uzytkownik = nazwaUzytkownika; } protected override bool AuthorizeCore(HttpContextBase httpContext) { if (uzytkownik == "Przemek") { return true; } return false; } }
Wywołanie tej klasy odbywa się poprzez udekorowanie metody akcji nowo powstałym atrybutem. W naszym przypadku AutoryzacjaUlubionych
[AutoryzacjaUlubionych("Przemek")] public ActionResult Dodaj(string adres) { // //Jakiś kod akcji. // }
- Trzecia metoda jest prostsza i chyba najczęściej stosowana. Pozwala na użycie wbudowanego filtra autoryzacji. Wbudowany filtr umożliwia podanie nazwy użytkownika oraz roli, którą musi posiadać.
Skorzystanie z tej metody polega na udekorowaniu metody akcji atrybutem Authorize, gdzie user oznacza nazwę użytkownika a roles oznacza rolę, którą musi posiadać.
[Authorize(Users = "Przemek", Roles = "Administrator")] public ActionResult Dodaj(string adres) { // //Jakiś kod akcji. // }