Makale Özeti

Bu yazımızda ASP.Net 2.0 ile beraber gelen membership kontrollerini incelemeye çalışacağız. Yazının sonunda sizlerinde göreceği üzere aslında temelde membership kontrollerini kullanmak adına bir zorluk ile karşılaşmıyorsunuz.

Makale

Bu yazımızda ASP.Net 2.0 ile beraber gelen membership kontrollerini incelemeye çalışacağız. Yazının sonunda sizlerinde göreceği üzere aslında temelde membership kontrollerini kullanmak adına bir zorluk ile karşılaşmıyorsunuz. Takip eden yazımızda ise membership kontrollerinin en çok merak edilen konularından birine, yani kendi membership provider ımızı yazmaya çalışacağız.

ASP.Net 2.0 bizim için birçok yenilik ile beraber geldi, bunu Visual Studio 2005'i açar açmaz birçoğunuz farketmiştir eminim. Bu yeniliklerin en başında ise işimizi oldukça kolaylaştırdığına inandığım membership kontrolleri geliyor.

Şu ana kadar farklı platformlarda farklı scripting dillerini kullanarak web uygulamaları geliştirdik. Son dönemde mail adreslerimizin marketing amaçlı kullanılmasından mıdır, CRM uygulamalarının popülerliğinden mi bilinmez hemen her sitede muhakkak üyelik sistemleriyle karşı karşıya kalıyoruz. Dolayısıyla biz developerlar olarak yarattığımız hemen her web uygulamasına bir üyelik sistemi ve yetkilendirme mekanizmasını eklemek durumunda kalıyoruz.

İşte tüm bu nedenlerle Microsoft ASP.Net'in son sürümüne işimizi oldukça kolaylaştıracak bir bileşen grubunu ASP.Net'e ekledi.

Bu yazıda ilk olarak ele alacağımız konu ASP.Net Web Site Configuration uygulamasını kullanarak yarattığımız web uygulamasına bir üyelik sistemini eklemek olacak.

IIS üzerinde çalışan yeni bir web uygulamasını yarattıktan sonra Visual Studio 2005 içerisinde yer alan WebSite>ASP.Net Configuration menüsünü tıklıyoruz. Bu karşımıza sadece mevcut uygulamamız için gerekli konfigurasyon ayarlarını yapabileceğimiz web tabanlı bir uygulamayı çıkarıyor.



ASP.Net Web Site Administration Tool sayesinde uygulamanız ile ilgili;

Güvenlik : Yeni kullanıcıların tanımlanması, yeni rollerin ve erişim kurallarının yaratılması işlemlerini
Uygulama Konfigurasyonu : Uygulamanızın SMTP ayarları, web.config dosyası gibi konfigurasyon gerektiren işlemleri
Provider : Uygulamanızın kullanacağı membership bileşeni işlemlerini

düzenleyebilir ve yönetetebilirsiniz. Biz bu yazımızda çoğunlukla security kısmı üzerinde duracağız.

Security menüsünü seçtiğinizde karşınıza isterseniz bir sihirbaz yardımıyla isterseniz doğrudan ilgili menüleri kullanarak uygulamanızın güvenlik ve erişim işlemlerinizi yönetebileceğiniz ekranlar karşınıza getirilecektir.

ASP.Net 2.0 varsayılan olarak Visual Studio 2005 ile beraber sisteminize kurulan SQL Server 2005 Express edition ile çalışır. Yani uygulamanıza security configurasyonlarını uyguladığınız anda uygulamanız için bir veritabanı yaratılır ve bunun tipide SQL Server 2005 Express edition cinsinden olacaktır. Bu henüz kendi veritabanımız ile uygulamayı geliştiremeyeceğimiz anlamını taşıyor ama biraz bekleyin bu konuda neler yapabilir bunu da tartışacağız. :)

Security Wİzard'da karşımıza ile çıkacak olan ekran uygulayacağımız güvenliğin Inranet mi yoksa Internet mi cinsinden olacağıdır. Biz bu ekranda Internet'i seçiyoruz.



Karşımıza çıkacak olan ikinci ekran ise uygulamamızda rol tabanlı güvenliği aktive edip etmeyeceğimiz yönünde. Bu bizim klasik olarak uyguladığımız admin'in yetkili olduğu alanlar, member ların yetkili olduğu alanlar ve kullanıcı olmayanların görebileceği alanları tasarlamamız anlamını taşıyor. Biz burada rol tabanlı güvenliği aktive edecek ve işimizi oldukça kolaylaştıracak bir şey yapacağız. Uygulamamızın admin yetkilendirmeli tüm dosyalarını uygulamamız içerisinde açacağımız bir admin klasörüne, member ların ulaşabilecekleri dosyaları ise members adlı bir klasöre koyacağız. Bu sayede rolleri ve daha sonra bu roller için oluşturacağımız erişim kurallarını tasarladığımızda sayfa içerisinde bir daha yetkilendirme işi ile uğraşmamış olacağız.







Şimdi ise sıra uygulamamıza ekleyeceğimiz ilk kullanıcılarda, daha sonra kendi yeni kullanıcı yaratma arayüzümüzü tasarlayacağız elbette ancak ilk 1-2 kullanıcıyı biz tasarlayalım.



Ve son ekranımız ise yeni bir access rule (erişim kuralı) eklemek olacak. Bunu neden yaptığımızı az önce birkaç satır ile açıklamaya çalışmıştım. Biraz detaylandıracak olursak; uygulamalarımızda genelde kullandığımız mantık kullanıcının login olmasının ardından session bilgisine yazacağımız bir yetki ID'si ile kullanıcının girmeyi planladığı sayfayı ona gösterebilir ama girişine izin vermeyebilirdik. Yada bir diğer kullandığımız mantık ise kullanıcıya yetkili olmadığı sayfalar ile ilgili linkleri hiç göstermemekti. Ama yine de ne olur ne olmaz düşüncesiyle her sayfanın en başında muhakkak kullanıcının yetkili olup olmadığını kontrol ederdik. Burada yarattığımız sistemde ise artık her sayfa başında kontrol yapmıyor, ilgili yetki seviyesine yani role ait tüm dosyalarımızı onun için özel olarak yarattığımız folder a koyuyoruz ve folder tabanlı bir güvenlik sistemi uyguluyoruz. Bu sayede yetkili olmayan kullanıcı girmeye teşebbüs etse bile sayfa tarafından otomatik olarak dışlanıyor, üstelik henüz hiç kod bile yazmadık :

Burada bir erişim kuralı oluşturacağız. Örneğin şunun gibi : Projemdeki "Admin" klasörüne sadece "Admin" rolüne sahip kullanıcılar girebilsin. Hadi bu access rule u beraber hazırlayalım.



Hepsi bu kadardı. Neler yaptık kısaca göz gezdirelim.

- IIS tabanlı bir web uygulaması yarattık
- ASP.Net Web Site Administration Tool sayesinde uygulamamızın role tabanlı çalışacağını belirttik
- Aynı tool sayesinde uygulamamıza "Admin" ve "Member" adında iki rol ekledik.
- İlk kullanıcımız olan "demo" kullanıcısını yarattık ve bu kullanıcıya admin yetkisi verdik.
- Son olarak da yeni bir access rule yazarak "Admin" folder ına sadece "Admin" yetkisine sahip insanların girebileceğini belirttik.

Şimdi uygulamamıza dönelim ve burada yaptığımız ayarları uygulamamız için kullanılabilir hale getirelim. Öncelikle "Admin" folder ı içerisinde yeni bir web form koyuyorum. İçerisinde sadece ""HOŞGELDİN ADMİN" yazacak. Bu sayede eğer kullanıcım admin yetkisine sahip ise boş bir sayfa görmesinin önüne geçmiş oluyorum.

Kullanıcının login olacağı ve site navigasyonunu sağlayacak olan tüm bileşenlerimi projemin rootunda bulunan default.aspx sayfasına koyuyorum.

İlk olarak sayfama ekleyeceğim bileşen sol tarafta yer alan toolbox'umda bulunan "login status" bileşeni. Bu bileşenin benim için sağladığı kolaylık uygulamamı açan kişiler için şayet login olmamışlarsa "LOGİN", login olmuşlarsa da "LOGOUT" linklerini gösteriyor oluşu. Hemen yanına yeni kullanıcı eklemek için tasarlayacağım "CreateUser.aspx" sayfasının ve Admin folderındaki dosyamı açacak olan linkimin nesnelerini de ekliyorum.



Şimdi kullanıcımın login olacağı sayfayı tasarlayalım. Bunun için projemin rootuna "Login.aspx" isimli bir sayfa ekliyorum. Bu sayfanın içerisinde tek yapmam gereken şey solda yer alan toolbox'ım aracılığı ile Login kontrolleri arasında yer alan "Login" bileşenini eklemek ve "Auto Format" menüsü aracılığı ile görünümünü biraz güzelleştirmek.



Burada yer alan tüm ingilice textleri ve hatta görünümdeki bileşenleri "Convert to Template" linkine tıklayarak düzenleyebilirim.

Ve son olarak projemize yeni bir web form ekleyelim, bu sayede yeni kullanıcı kayıt ekranımızı tasarlayacağız. Burada yine bize çok iş düşmüyor, tek yapmamız gereken sol tarafta yer alan "Login" kontrollerinden "Create User Wizard" 'ı seçmek ve formumuzun üzerine sürükleyim bırakmak.



Ve artık uygulamamızı çalıştıralım. İlk gelen sayfada henüz kullanıcı login olmadığı için solda yer alan "Login Status" bileşeni "Login" textini gösteriyor.



Login butonuna tıklama olayının hemen ardından tasarladığımız "Login.aspx" sayfası açılıyor.



Az önce yarattığımız "demo" kullanıcısı ile login olduğumuzda login başarılı ve tekrar ana sayfaya yönlendiriliyoruz. Burada az önce eklediğimiz "login view" bileşenine dikkat! Artık "logout" textini bize gösteriyor. Şimdi "Admin" için yetkilendirdiğimiz sayfaya girmeye çalışalım bakalım yetkilendirme tamamlanmışmı?



Klasik login ve yeni kullanıcı kayıt işlemini tamamladık ve farkında mısınız tek satır kod bile yazmadık :)

Bundan sonrası yine sizlerin isteğine bağlı olarak oluşturabileceğiniz "Şifre Hatırlatma" , "Şifre Sıfırlama" gibi işlemler.

Buraya kadar herhangi bir database oluşturmadan geldik farkındaysanız. Çünkü ASP.Net 2.0 default olarak SQL Server Express Edition'ı kullanan bir Provider barındırıyor ve bu uygulama için gerekli database i kendisi oluşturdu.

Peki ama ya ben kendi tablolarıma bağlanmak istiyorsam?

İşte bu durum için kafanızı çok karıştırmayacak özel bir durumu programlamamız gerekiyor. Çünkü ASP.Net 2.0 ile beraber sadece SQL Server Express edition için bir membership provider ı geliyor. Kendi database'inizi (Access, SQL Server 2005, Oracle, MySQL, vb..) kullanmak istediğinizde ise kendi membership provider ınızı yazmanız gerekiyor. Bu konudaki detayları bir sonraki yazımızda veriyor ve örnek provider ları beraber yazıyor olacağız.


Evren AYAN
Microsoft MVP - Connected System Developer
http://www.evrenayan.net