ASP.NET MVC 2 Mimarisi üzerinde Uygulama Geliştirme ve ASP.NET'in sunduğu Uygulama Yönetim ve Güvenlik altyapısı hakkında yeni başlayanlara özel giriş niteliğinde anlatım.
Özgür Web Teknolojileri Günleri 2010 - İbrahim Hızlıoğlu // CodeIgniter Sunumu
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
1. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
ASP.NET MVC 2 MİMARİSİ,
ASP.NET UYGULAMA YÖNETİMİ
VE GÜVENLİK DESTEĞİ
Platform, Programlama Dili: Visual Studio 2010, C#
ÖNSÖZ: .NET tabanlı bir uygulama geliştirme projesi öncesi
yaptığım çalışmaları, yararlı olmasını dileyerek doküman
haline getirdim ve paylaşıyorum.
Ali İhsan Çalışkan
aliihsancaliskan@yahoo.com
Hazırlayan: Ali İhsan Çalışkan Sayfa 1/22
2. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
1. GİRİŞ
Dokümanda anlatılacak olan ASP.NET MVC 2 uygulamaları ve ASP.NET güvenlik
desteğine ilişkin temel bilgiler aşağıda yer almaktadır.
1.1. ASP.NET
Microsoft tarafından geliştirilen ve programcılara dinamik web siteleri, web
uygulamaları ve web servisleri geliştirme ortamı sunan bir web uygulamaları
geliştirme çatısı/teknolojisidir.
1.2. ASP.NET MVC
ASP.NET’in sunduğu ve model-view-controller (MVC) mimari desenini
uygulayan bir web uygulama çatısıdır. MVC ile ASP.NET uygulamaları Model,
View ve Controller rollerine bölünerek geliştirilir. ASP.NET MVC uygulama
altyapısı, ASP.NET Web Formları geliştirme altyapısına alternatif olarak
sunulmuştur.
Model-view-controller; yazılım mühendisliğinde kullanılan, bir web
uygulamasının bileşenlerini mantıksal olarak ayıran bir ‘mimari tasarım
deseni’dir. Bu ayırma işlemi ile, uygulamanın özgün parçaları üzerinde daha
fazla kontrol sağlanır ve geliştirme, değişiklik ve test işlemleri kolaylaşır.
Kullanıcıya yüklü miktarda verinin sunulduğu karmaşık uygulamalarda veri ve
gösterimin soyutlanması esasına dayanır. Böylece veriler (model) ve kullanıcı
arayüzü (view) birbirini etkilemeden düzenlenebilir. Model-view-controller,
bunu controller adı verilen ara bileşenle, veri gösterimi ve kullanıcı
etkileşiminden, veri erişimi ve iş mantığını çıkarma suretiyle çözmektedir.
Hazırlayan: Ali İhsan Çalışkan Sayfa 2/22
3. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
M (Model)
M (Model), İş Mantığını ve veri işleme süreçlerini yürütür. C (Controller)
tarafından gönderilen emirlere göre hareket eder. Bilgi işleme sürecinden
sonra veriyi C'ye, diğer modellere veya doğrudan V (View)'ye gönderir.
V (View)
V (View) son kullanıcıya gösterilecek olan verinin sunumu ile ilgilenir. V, bu
bilgiyi C veya M'den alır, aynı zamanda son kullanıcıdan gelen talepleri C'ye
iletir.
C (Controller)
C ise sistemin ana kısmıdır. Gelen talepleri kontrol eder ve sistemin diğer
elemanlarının (M,V) bilgiyi uygun şekilde alıp, göndermelerini sağlar.
ASP.NET MVC 2.0 iskeleti üzerinde bir MVC 2 web uygulamasının nasıl
yaratılacağı ve geliştirileceğine dair bilgiler ilerleyen bölümlerde
anlatılmaktadır.
1.3. ASP.NET Güvenlik Desteği
Günümüzde e-ticaret siteleri, portaller, web siteleri, forumlar ve sosyal ağlar
gibi birçok uygulama, kullanıcı hesapları altyapısını sunar. Kullanıcı hesapları
sunan uygulamalar bir takım hazır servisler de sunmalıdır. Örneğin yeni
ziyaretçiler yeni bir hesap yaratabilmeli, sisteme giriş yapan kullanıcı ya da
kullanıcı gruplarının kimliğine göre bazı sayfa ve eylemler
sınırlandırılabilmeli/özelleştirilebilmelidir. Kullanıcı grupları, rolleri ve
hesaplarının yönetimi kolayca yapılabilmelidir.
ASP.NET, geliştiriciler için yukarıda bahsedilen servisleri hazır olarak sunan
bir güvenlik desteği altyapısı sağlar. Güvenlikle ilgili uygulamaya özgü
konfigürasyon değişiklikleri uygulamanın web.config dosyasında saklanırken
kullanıcı, rol, üyelik gibi veriler ise ASPNETDB isimli veritabanında saklanır.
Geliştiricilere bu altyapıyı kullanarak aşağıdaki işlemleri
gerçekleştirebilmelerini sağlar:
Uygulamada kullanıcı tanımlama ve kullanıcı oturumu açma,
ASP.NET Üyelik altyapısı ile kullanıcı hesaplarını yönetebilme,
Kullanıcı hesaplarını ekleme, güncelleme ve silme,
Giriş yapan kullanıcının kimliğine bağlı olarak web sayfası, dizin ya da
belirli fonksiyonlara kısıtlı erişim sağlama,
ASP.NET’in Rol Yönetimi altyapısı ile kullanıcı hesaplarını roller ile
ilişkilendirme,
Kullanıcı rollerini yönetme,
Web Sayfası, dizin ya da belirli fonksiyonlara rollere dayalı erişim
kısıtlaması getirme,
Şifre Yönetimi (Yaratma, değiştirme, otomatik sıfırlama)
ASP.NET’in mevcut güvenlik altyapısını değiştirme ve geliştirme
imkanı.
Hazırlayan: Ali İhsan Çalışkan Sayfa 3/22
4. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
2. ASP.NET MVC Uygulaması
Bu bölümde bir ASP.NET MVC 2 uygulamasının yaratılması, uygulama
katmanlarının geliştirilmesi ve ASP.NET güvenlik desteği ile ilgili bilgiler örnek
küçük bir uygulama geliştirilerek anlatılmıştır.
Uygulama; Microsoft Visual Studio 2010 geliştirme ortamı, SQL Server 2008
Express Edition veritabanı ve C# dili kullanılarak geliştirilmiştir.
2.1. Uygulamanın Yaratılması
Visual Studio açıldıktan sonra File -> New -> Project menü öğesi seçilir.
Bir ASP.NET MVC 2 Uygulaması yaratmak için açılan New Project
penceresinde sırasıyla sol bölümdeki Visual C# -> Web ve sağ bölümdeki
ASP.NET MVC 2 Web Application öğeleri seçilir. Aşağıdaki Name alanına
uygulamanın adı yazılır. Uygulamanın adını Uygulama1 olarak belirleyerek
OK butonuna basabiliriz.
Hazırlayan: Ali İhsan Çalışkan Sayfa 4/22
5. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
OK butonuna basıldıktan sonra Create Unit Test Project isimli bir pencere
açılacaktır. Uygulamanızın fonksiyonelliği ve davranışlarını doğrulayacak olan
otomatik testler içeren bir Birim Testi Projesi yaratmak isteyip
istemediğinizi soran bu pencereyi bu kılavuz kapsamında olmadığı için No,
do not create a unit test project seçeneğini seçip OK butonuna basarak
kapatabilirsiniz.
Visual Studio, bu işlemler sonucunda yeni bir ASP.NET MVC uygulamasını,
otomatik olarak eklediği dosya ve dizinlerle birlikte yaratır.
Yandaki resimde de görüldüğü gibi çok sayıda
dizin ve dosyadan oluşan yeni bir uygulama
yaratıldı. ASP.NET MVC uygulamaları
aşağıdaki dizinlerle birlikte yaratılır:
Dizin Amacı
URL istemlerini idare eden
/Controllers
Controller sınıflarını içerir.
Veriyi temsil eden ve
/Models
işleyen sınıfları içerir.
Çıktıların görüntülenmesini
/Views sağlayan kullanıcı arayüzü
dosyalarını içerir.
Okuma/yazma yapılmak
/App_Data istenen veri dosyslarının
saklandığı yerdir.
JavaScript kütüphane
/Scripts dosyaları ve scriptlerin
konulduğu yer.
CSS ve imaj dosyaları ve
/Content diğer dinamik olmayan
içerik.
Hazırlayan: Ali İhsan Çalışkan Sayfa 5/22
6. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
NOT: ASP.NET MVC bu yapıda olmak zorunda değildir. Daha büyük
uygulamalarda, yönetilebilirlik açısından uygulama çok sayıda projeye
ayrılabilir. Örneğin; veri modeli sınıfları genellikle ayrı bir kütüphane olarak
web uygulamasından bağımsız geliştirilir.
Oluşturulan uygulama şablonuna daha detaylı bakacak olursak;
Controllers dizini altında iki tane controller
sınıfı bulunur.
HomeController.cs Visual Studio’nun
otomatik olarak oluşturduğu Home ve
About isimli sayfaların akışının yönetildiği
sınıftır.
AccountController.cs sınıfı ise,
ASP.NET’in sunduğu Form ve
Üyelik(Membership) servisleriyle ilgili
metotları içerir. Örneğin, sisteme giriş/kayıt
yapmak için açılan LogOn.aspx /
Register.aspx sayfalarının kullandığı
LogOn() ve Register() metodlarını içerir.
/Views dizinini açtığımızda, 3 alt dizin
görürüz.
/Account dizini altında uygulamaya giriş,
kullanıcı kayıt, şifre değişikliği gibi işlemlere
ilişkin formlar yer alır.
/Home dizini altında örnek olarak
yaratılmış iki tane sayfa yer almaktadır.
/Shared dizini altında ise ortak kullanılan
şablon dosyaları yer alır.
Hazırlayan: Ali İhsan Çalışkan Sayfa 6/22
7. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
/Content ve /Scripts dizinleri sırasıyla
uygulamanın stilini belirleyen Site.css
dosyasını ve AJAX ve jQuery desteği
sağlayan JavaScript kütüphanelerini içerir.
Uygulama dosyalarını inceledikten sonra Visual Studio’nun oluşturduğu
uygulamayı çalıştırarak test edebiliriz.
Debug -> Start Without Debugging menü öğelerine tıklayarak uygulamayı
çalıştırabiliriz.
Hazırlayan: Ali İhsan Çalışkan Sayfa 7/22
8. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
Uygulama, aşağıdaki gibi açılacaktır. Aşağıdaki resim Home.aspx formunu
görüntülemektedir.
Log On linkine tıklanarak aşağıdaki gibi kullanıcı giriş formu açılabilir.
(LogOn.aspx)
Hazırlayan: Ali İhsan Çalışkan Sayfa 8/22
9. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
2.2. ASP.NET Uygulama Güvenliği
Bu bölümde bir önceki bölümde yaratılan ASP.NET MVC 2 Uygulaması’nın
güvenlik altyapısı anlatılacaktır.
ASP.NET; hazır olarak uygulama yönetimi, konfigürasyonu ve güvenliği
altyapısı sunar.
Oluşturulan uygulamaya ait yönetim konsoluna girmek için; Visual Studio’da
Project -> ASP.NET Configuration menü öğesine tıklanır.
ASP.NET Web Site Application Tool aşağıdaki gibi açılacaktır.
Hazırlayan: Ali İhsan Çalışkan Sayfa 9/22
10. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
Açılan yönetim uygulaması Güvenlik (Security), Uygulama Konfigürasyonu
(Application Configuration) ve Sağlayıcı Konfigürasyonu (Provider
Configuration) şeklinde 3 ayrı özellik sunar.
Uygulama Konfigürasyonu ile uygulama ayarları, e-posta servisi için SMTP
ayarları, uygulamayı aktif/pasif yapma, debugging gibi yönetimsel
fonksiyonlar gerçekleştirilir.
Sağlayıcı Konfigürasyonu ile web sitesi yönetimi için kullanılan veri
modelinin nerde saklanacağı ile ilgili ayarlar yapılır. Örneğin kullanılan Üyelik
ve Rol Sağlayıcıları burdan ayarlanabilir ve test edilebilir. Yeni yaratılan
uygulamalar ASP.NET’in sunduğu sağlayıcılar kullanılacak şekilde konfigüre
edilmiştir. ASPNETDB isimli veritabanını kullanır.
Güvenlik bölümünde ise uygulamanın güvenlik altyapısı ile ilgili yönetimsel
fonksiyonlar gerçekleştirilir. Kimlik Doğrulama (Authentication) için kullanıcı
ve şifrelerinin yönetimi, rollerin yaratılması (kullanıcı grupları) ve
uygulamanın çeşitli bölümlerine erişim izinlerinin kontrolü (Authorization) bu
bölümde gerçekleştirilir. Ancak; erişim kontrolleri yalnızca dizin bazında
yapılabilmektedir. Sayfa bazındaki erişim kontrolü ilerleyen bölümlerde
programatik olarak gösterilecektir.
Güvenlik ayarları için Web Site Administration uygulamasının üst
menüsünden Security’i seçiniz.
Hazırlayan: Ali İhsan Çalışkan Sayfa 10/22
11. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
Uygulama ilk yaratıldığında, roller aktif değildir. Rolleri aktif hale getirmek
için açılan sayfadaki Roles bölümünün altındaki Enable roles linkine
tıklayınız.
Roller aktif olduktan sonra güvenlik yönetimi aşağıdaki bölüm kullanılarak
yapılabilir.
ASP.NET güvenlik altyapısı ile ilgili uygulamaya ait konfigürasyon bilgileri
uygulamanın Web.config dosyasında saklanır. Örneğin az önce rol
sağlayıcısı aktif hale getirildikten sonra Web.config dosyasındaki
roleManager etiketinin enabled değişkeni true olarak değişmiştir.
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="ApplicationServices" applicationName="/"
name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
<add applicationName="/" name="AspNetWindowsTokenRoleProvider"
type="System.Web.Security.WindowsTokenRoleProvider" />
</providers>
</roleManager>
ASP.NET güvenlik altyapısı, oluşturulan kullanıcı ve rollere ilişkin bilgileri
tutmak üzere uygulama içinde bir SQL Server veri dosyası ile gelir. Proje
dosyalarına Windows Explorer ile bakarak App_Data klasörüne girdiğinizde
aşağıdaki gibi ASPNETDB isimli veri tabanı dosyasını görebilirsiniz.
Hazırlayan: Ali İhsan Çalışkan Sayfa 11/22
12. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
Dilerseniz bu dosyayı SQL Server veritabanına iliştirebilirsiniz. Bu bölümde
ASPNETDB.MDF dosyasını Visual Studio’da açarak veritabanının yapısını
görmeye çalışacağız. Bunun için öncelikle aşağıdaki gibi Visual Studio’nun sol
bölümünde bulunan Server Explorer açılır ve Data Connections’a sağ
tıklandıktan sonra Add Connection’a tıklanır.
Açılan Choose Data Source penceresinden Microsoft SQL Server
Database File seçilir ve Continue butonuna tıklanır.
Hazırlayan: Ali İhsan Çalışkan Sayfa 12/22
13. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
Açılan Add Connection penceresinde Database file name alanını
doldurmak için Browse butonuna basılarak proje dosyaları içinde
/App_Data/ASPNETDB.MDF dosyası seçilir ve Test Connection ile test
edildikten sonra OK butonuna basılır.
Bu işlem ile ASP.NET veri dosyasına bir bağlantı kurmuş olduk ve artık
aşağıdaki gibi veritabanı nesnelerini görebilir ve yönetebiliriz. Aşağıda
görünen tablo ve diğer nesneler ASP.NET Uygulama Yönetimi altyapısı için
otomatik oluşturulan veri altyapısıdır.
Yandaki resimde göründüğü gibi,
uygulama içinde tanımlanacak
kullanıcılar, roller, kişiselleştirme,
üyelik, profil gibi tanımlar bu
veritabanında saklanacaktır.
Hazırlayan: Ali İhsan Çalışkan Sayfa 13/22
14. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
2.3. Uygulama Geliştirme
Önceki bölümlerde yeni bir MVC 2 uygulaması yaratıldı ve hazır olarak
sunulan ASP.NET güvenlik altyapısı etkin hale getirildi. MVC 2 uygulamasının
yapısı ile güvenlik altyapısına ilişkin bilgiler verildi.
Bu bölümde ise MVC mimarisi kullanılarak uygulamaya yeni sayfalar
ekleme ve bu sayfaların yaratılacak kullanıcı ve rollere özgü erişim
yetkilerinin yapılması anlatılacaktır.
Örnek uygulamada Microsoft Virtual Earth web servisinden şehir
haritalarını getiren bir sayfa yaratılacaktır.
Controller’ın Eklenmesi:
Controller sınıfları HTTP istemlerinin karşılanması ve yanıt verilmesinden
sorumludur. Her tarayıcı istemi belirli bir controller ile eşleştirilir.
Örneğin; uygulamayı çalıştırdıktan sonra About sayfasına tıklayınız. Port
numarası farklı olsa da http://localhost:49812/Home/About adresine benzer
bir adres açılacaktır. Bu adres açıldığında uygulamanın HomeController
isimli controller’ı çağrılır. HomeController sınıfı bu tarayıcı isteğini
yanıtlamaktan sorumludur. HomeController sınıfı içinde ise About() isimli
metot (Controller Action) bu URL ile çağrılmış olacaktır. Controller
Action’lar ile bir Controller sınıfı içinde tarayıcıya farklı yanıtlar döndürülür.
Aşağıdaki örnekte About isimli metodla tarayıcıya bir view (HTML)
döndürülür. Bu view ise uygulamanın /Views/Home/About.aspx dosyasıdır.
public ActionResult About()
{
return View();
}
Tarayıcıya gönderilen yanıt HTML formatında olabileceği gibi farklı bir
Controller’a yönlendirme, metin, JavaScript, ikil bir dosya içeriği, indirilebilir
bir dosya da olabilir. Ayrıca View nesnesi aracılığıyla tarayıcıya daha önce
oluşturulan bir veri modeli de gönderilebilir.
MVC uygulamasına yeni bir Controller eklemek için Solution Explorer’da
Controllers dizinine sağ tıklayarak Add’e tıklayınız ve sonra Controller’ı
seçiniz.
Hazırlayan: Ali İhsan Çalışkan Sayfa 14/22
15. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
Açılan Add Controller penceresinde Controller Name alanına
HaritaController yazarak Add butonuna tıklayınız. Controller Name
alanının ‘Controller’ ile bitmesi gerekmektedir.
Visual Studio projeye HaritaController.cs adında yeni bir sınıf ekleyecektir.
Şimdi de bu sınıfa haritaları görüntüleyebilmek için yeni bir Action Method
ekleyelim.
Yeni bir Action Method eklemek için HaritaController.cs sınıfına aşağıda
kodu yapıştırıp dosyayı kaydediniz.
public ActionResult HaritaGoruntule()
{
return View();
}
Hazırlayan: Ali İhsan Çalışkan Sayfa 15/22
16. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
View’in Eklenmesi:
Haritaları görüntülemek için HaritaController sınıfının yöneteceği bir sayfa
eklenir. Yeni bir sayfa içeriği dosyası eklemek için HaritaController sınıfı açılır,
HaritaGoruntule() metodu seçilerek sağ tıklanır ve aşağıdaki gibi Add
View’e tıklanır.
Açılan Add View penceresinde oluşturacağınız aspx sayfasının adı, sayfanın
şablonu, bağlı olacağı veri modeli gibi seçenekler yer alır. Varsayılan
değerlerle Add butonuna basınız.
Hazırlayan: Ali İhsan Çalışkan Sayfa 16/22
17. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
Aşağıda görüldüğü gibi yeni bir view sayfası oluşturuldu.
View’e İçerik Eklenmesi:
Yeni oluşturulan HaritaGoruntule.aspx sayfasını açınız ve aşağıdaki içeriği
Content elemanının içine kopyalayınız.
<h2>Şehir Haritaları</h2>
Şehir seç:
<select onclick="GetMap(value);">
<option value="Istanbul">Istanbul, Türkiye</option>
<option value="NewYork">New York, NY</option>
<option value="Rio">Rio de Janeiro, Brazil</option>
<option value="Paris">Paris, France</option>
<option value="Naples">Naples, Italy</option>
<option value="Keta">Keta, Ghana</option>
<option value="Beijing">Beijing, China</option>
<option value="Sydney">Sydney, Australia</option>
</select>
<br />
<br />
<div id='earthMap' style="position:relative; width:400px; height:400px;">
</div>
<script charset="UTF-8" type="text/javascript"
src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&mkt=en-us">
</script>
<script type="text/javascript">
var map = null;
var mapID = '';
function GetMap(mapID) {
switch (mapID) {
case 'Istanbul':
map = new VEMap('earthMap');
map.LoadMap(new VELatLong(41.01, 28.96), 10, 'i', true);
break;
case 'NewYork':
map = new VEMap('earthMap');
map.LoadMap(new VELatLong(40.7, -74), 10, 'i', true);
break;
case 'Rio':
map = new VEMap('earthMap');
Hazırlayan: Ali İhsan Çalışkan Sayfa 17/22
18. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
map.LoadMap(new VELatLong(-22.91, -43.18), 10, 'i', true);
break;
case 'Paris':
map = new VEMap('earthMap');
map.LoadMap(new VELatLong(48.87, 2.33), 10, 'i', true);
break;
case 'Naples':
map = new VEMap('earthMap');
map.LoadMap(new VELatLong(40.83, 14.25), 10, 'i', true);
break;
case 'Keta':
map = new VEMap('earthMap');
map.LoadMap(new VELatLong(5.92, 0.983), 10, 'i', true);
break;
case 'Beijing':
map = new VEMap('earthMap');
map.LoadMap(new VELatLong(39.91, 116.39), 10, 'i', true);
break;
case 'Sydney':
map = new VEMap('earthMap');
map.LoadMap(new VELatLong(-33.86, 151.21), 10, 'i', true);
}
}
</script>
Böylece yeni sayfamızı yaratmış ve içeriklerini eklemiş olduk. Sayfanın
uygulama menüsünde görünebilmesi için menülerin bulunduğu
/Views/Shared/Site.Master dosyası açılmalı ve yeni sayfaya ilişkin menü
öğesi aşağıdaki gibi eklenmelidir.
Menü öğesi eklendikten sonra uygulamayı çalıştırarak yeni sayfayı test
edebilirsiniz.
Hazırlayan: Ali İhsan Çalışkan Sayfa 18/22
19. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
Sayfa Erişim Yetkilerinin Yönetilmesi:
ASP.NET güvenlik altyapısının sunduğu olanakları incelemek için sırasıyla
aşağıdaki işlemler yapılacaktır.
TemelKullanici ve Yetkili adında iki tane rol (grup) tanımı
yapılacaktır.
ali, mustafa ve seda adında 3 tane kullanıcı tanımı yapılacaktır. ali
isimli kullanıcıya Yetkili ve TemelKullanici rolleri verilecek, diğer iki
kullanıcıya ise TemelKullanici rolü verilecektir.
Site ziyaretçileri sadece Home sayfasını görebilirken, TemelKullanici
rolündeki kullanıcılar Home ve About sayfalarını, Yetkili rolündeki
kullanıcılar ise bunlara ek olarak Şehir Haritaları sayfasını
görebilecektir.
ASP.NET Web Site Administration aracını açmak için Visual Studio’da Project
-> ASP.NET Configuration menü öğesine tıklayarak açılan uygulamada
Security sekmesine tıklayınız.
Yeni bir rol eklemek için Security sayfasındaki Create or Manage roles
linkine tıklayınız. Açılan sayfada rol adını yazarak rolleri tek tek ekleyiniz.
Rolleri aşağıdaki gibi ekledikten sonra sayfadaki Back butonuna tıklayarak
Security sayfasına dönünüz.
Yeni kullanıcı eklemek için Security sayfasında Create User linkine
tıklayarak açılan sayfada kullanıcı bilgileri ile kullanıcının sahip olacağı rolleri
seçerek Create User butonuna basınız.
Hazırlayan: Ali İhsan Çalışkan Sayfa 19/22
20. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
Diğer iki kullanıcıyı da ekledikten sonra Security sayfasındaki Manage
users linkine tıklayarak aşağıdaki gibi kullanıcı listesini görebilirsiniz.
Sayfalara erişim yetkisini programatik olarak ayarlamak için Controller
sınıflarını kullanırız. Şehir Haritaları sayfasının sadece Yetkili rolündeki
kullanıcılar tarafından görünebilmesi için HaritaController.cs dosyasını
açarak HaritaGoruntule() metodunu bulunuz. HaritaGoruntule() metodu
Şehir Haritaları (HaritaGoruntule.aspx) sayfasının tarayıcıya
gönderilmesini sağlayan metoddur. Metodun üstüne aşağıdaki gibi Authorize
isimli belirtimi (annotation) ekleyerek erişim kuralını oluşturabilirsiniz.
[Authorize(Roles = "Yetkili")]
public ActionResult HaritaGoruntule()
{
return View();
}
Benzer şekilde HomeController.cs dosyasını açarak About() metodu üzerine
aşağıdaki gibi belirtim tanımı yapabilirsiniz.
[Authorize(Roles = "TemelKullanici, Yetkili")]
public ActionResult About()
{
return View();
}
Hazırlayan: Ali İhsan Çalışkan Sayfa 20/22
21. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
Yukarıdaki işlemler ile formların erişim yetkisini rollere göre tanımladık.
Uygulamanın menü öğelerine de bu kurala göre programatik olarak erişim
kuralı tanımlamalıyız. Bu sebeple Site.Master dosyasını açarak menu id’li
elemanın içini aşağıdaki gibi değiştiriniz.
<li><%: Html.ActionLink("Home", "Index", "Home")%></li>
<%
if (Page.User.IsInRole("Yetkili"))
{
%>
<li><%: Html.ActionLink("Şehir Haritaları", "HaritaGoruntule", "Harita")%></li>
<%
}
if (Page.User.IsInRole("Yetkili")||Page.User.IsInRole("TemelKullanici"))
{
%>
<li><%: Html.ActionLink("About", "About", "Home")%></li>
<%
}
%>
Sayfa Erişim Yetkilerinin Test Edilmesi:
Erişim yetkilerini test etmek için uygulamayı çalıştırınız. Uygulama ilk
açıldığında yalnızca ziyaretçilerin görebileceği Home sayfası açılacak ve
menüde sadece bu sayfa görünecektir.
Uygulamanın sağ üst köşesinde bulunan Log On linkine tıklayarak ali
kullanıcısı ile uygulamaya giriş yapınız. Ali kullanıcısı Yetkili rolüyle tüm
sayfaları görme yetkisine sahip olduğundan menüde de tüm sayfaları
görebilecektir.
Seda ve mustafa kullanıcıları ise yalnızca TemelKullanici rolüne sahip
olduklarından giriş yaptıklarında aşağıdaki gibi Home ve About sayfalarını
görebileceklerdir.
Hazırlayan: Ali İhsan Çalışkan Sayfa 21/22
22. ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
3. SONUÇ
Bu dokümanda ASP.NET MVC2 Uygulama mimarisi ve güvenlik altyapısı, giriş
seviyesinde örneklerle anlatılmıştır. Bu mimari ve altyapı ile diğer .NET servis
ve API’ları da kullanılarak Visual Studio ile kurumsal web uygulamaları, web
siteleri ve web servisleri gibi çok sayıda uygulama geliştirilebilir.
ASP.NET MVC hakkında daha fazla bilgi için:
http://www.asp.net/mvc
ASP.NET Güvenlik Altyapısı hakkında daha fazla bilgi için:
http://www.asp.net/security/tutorials
Referanslar:
http://en.wikipedia.org/wiki/ASP.NET
http://en.wikipedia.org/wiki/ASP.NET_MVC_Framework
http://en.wikipedia.org/wiki/ASP.NET_Web_Site_Administration_Tool
http://www.asp.net/
http://msdn.microsoft.com/en-us/library/dd410597.aspx
Hazırlayan: Ali İhsan Çalışkan Sayfa 22/22