MVC – Custom Authorization Attribute

Asp.Net  Microsoft .Net  Nisan 15, 2017

Merhaba arkadaşlar bu yazımda size ASP.Net MVC projelerinde Custom Authorization Attribute konusundan bahsedeceğim. Malumunuz yetkilendirme konusu bazen istediğiniz şeyleri yapamıyor. Bu durumda başvuracağımız bir yolda kendi yetkilenirme sistemimiz olacaktır.

Konuyu biraz daha detaylandırıp öyle anlatayım. Malumunuz Authorization olayı güzel ancak bazen biz session bazlı davranışlarıda bu authorizationa katmak istiyoruz veya başka bir sebeple daha dinamik ve farklı şeyler arayabiliriz. Bu yazıda CAA konusunu session ile nasıl çalıştıracağımıza değineceğim. Hemen bir adet ASP.NET MVC projesi açalım.

Ana dizine bir Components dizini ekleyelim. Sonuç olarak Authorization sınıfı bir bileşen olarak çalışacaktır. Klasörümüze de SessionAuthorizationAttribute.cs adında bir sınıf ekleyelim.

2017-04-16 00_38_41-CustomAuthorizationAttr - Microsoft Visual Studio

Gördüğünüz gibi sınıfımız burada olacak. Şimdi olaya devam edecek olursak bu sınıfın standartları sağlayabilmesi için temel AuthorizeAttribute sınıfını içermesi gerekiyor. O yüzden sınıf tanımını şu şekilde yapalım.

public class SessionAuthorizationAttribute: System.Web.Mvc.AuthorizeAttribute

Standart AuthorizeAttribute sınıfı System.Web.Mvc altında bulunmaktadır. MVC dışında ki projelerde Authorization bu şekilde kullanılmadığı için (Web form vs) olay Mvc uzayının altında oluyor. Dönüyoruz geriye. Burada yapmanız gereken temel bir olay var, override edeceğiniz bir metod. İster override yazıp boşluk bırakın ve gelen listeden OnAuthorization eventini seçip enterleyin isterseniz resimde gördüğünüz kodu yazın (yada github daki projeyi indirin kullanın 🙂

2017-04-16 00_45_17-CustomAuthorizationAttr - Microsoft Visual Studio

Gördüğünüz gibi sınıfımız bu hali aldı. Peki şimdi session durumuna göre authorize olayına bakacağız. Burada authorize olmayan istekleri ben 401 hatasıyla durduracağım. Siz isterseniz redirect filan da yapabilirsiniz. Şöyle diyeceğim session da login değeri ok değilse hata ver.

2017-04-16 01_08_04-CustomAuthorizationAttr - Microsoft Visual Studio

Evet eğer session da ki login değeri null veya ok değilse bize Forbidden 403 hatası vermiş olacak. Şimdi her yerdemi bu olacak diye düşünmeyin kullanım şekline göre durum değişiyor elbet. Planımız şu standart home controllerinin about action una bunu uygulayalım.

2017-04-16 01_10_54-CustomAuthorizationAttr - Microsoft Visual Studio

About actionuna erişildiği zaman aşağıdaki hatayı alacaklar.

2017-04-16 01_12_05-HTTP 403 hatası ‎- Microsoft Edge

Tabi edge hatayı direk verdi chrome bom boş getirsede, bu yüzden print screen edgeden aldım. İsterseniz projenize custom error pages ekleyin daha kolay yönetilir bu durum. Peki bu şekilde kullanmak bazen sizi sıkabilir, diyebilirsiniz ki ben bunu her actiona mı uygulayacağım, classa versek olmaz mı tabiki olur. Ancak home controllerinde ki bütün actionlar artık yetki isteyecektir. Hemen bazı arkadaşlar diyebilir AllowAnonymous yapıştırırız diye ama malesef aslında o attribute bu süreçte sadece bilgi veriyor, elbette alırsak. Kodu şöyle düzenleyelim önce.

2017-04-16 01_23_07-CustomAuthorizationAttr - Microsoft Visual Studio

Burada göreceğiniz gibi SkipAuthorization fonksiyonunu ekleyerek AllowAnonymousAttribute kullanılan bir yerde bu işlemi kontrol etme demiş olduk. Aksi halde AllowAnonymous yazmanız bir işe yaramayacaktır. Buna göre ayarlar isek controlleri

2017-04-16 01_26_04-CustomAuthorizationAttr - Microsoft Visual Studio

Bu durumda öncekine göre artık sadece About değil Contact actionu da session dan login değerini isteyecek. Peki bir adım daha atalım ve diyelim ki login değeri Attributeden belirlensin böylece dinamik bir sistem kurmuş oluruz. Hemen bir property ekleyerek işe başlayalım.

2017-04-16 01_29_21-CustomAuthorizationAttr - Microsoft Visual Studio

Bakın OkValue diye uyduruk bir değer oluşturdum ve if içerisinde session da ki login buna eşit mi dedim. Olay bu istediğiniz kadar property oluşturabilirsiniz. Bunları ister session için key veya değer olarak verebilirsiniz. Artık hayal gücünüz neye yetiyorsa. Şimdi controller tarafına geçelim.

2017-04-16 01_31_32-CustomAuthorizationAttr - Microsoft Visual Studio

Bakınız şimdi Attribute eklediğimizde propertynin değerini böyle atayabiliyoruz. Bundan sonrası sizin login sayfanızda bu şekilde sessiona değer atayıp buradan okumak olacak. Projenin tamamı github da

https://github.com/halityurttas/CustomAuthorizationAttr.git

adresinde bulabilirsiniz.

Esenlikle…

Bu yazı 1959 defa görüntülendi

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yazar Hakkında

15 yıllık çalışma hayatında birçok proje geliştirmiş binlerce projeyi inceleme fırsatı bulmuş yazılım aşığıdır. İşini hobi olarak gören yazarımız iş hayatını profesyonelce zevkle sürdürmektedir.

Son Eklenenler