MVC (Model View Controller), oluşturulan sitede kimlik doğrulaması ve yetkilendirme işlevini kolaylıkla sağlar. Sadece kimliği doğrulamış kullanıcılar sitenin izin verilen kısmına erişebilirler. Controller (kontrol) içinde tanımlanan yetkilendirme ile her view (görünüm) farklı kişilerin erişimine açılabilir. Bir MVC uygulaması gerçekleştirebilmek için bilgisayarda Visual Studio 2008 SP1 yüklü olması gereklidir. Standart bir MVC uygulaması yapabilmek için daha önceki yazıma bakabilirsiniz. Öncelikle File (Dosya) -> New Project (Yeni Proje) adımlarından sonra açılan pencereden ASP.NET MVC Web Application (ASP.NET MVC Web Uygulaması) seçilerek proje oluşturulur. Bir sonraki adımda test projesi istenilip istenmediğini soran pencere gelir. Burada test projesi istenilmediğine dair seçim yapılır. (Visual Web Developer sürümlerinde bu pencere çıkmaz.) Proje oluşturulduktan sonra güvenlik ayarlarına ulaşabilmek için derlenmesi gerekir. Bunun için “F5” tuşuna basılması yeterli olur. Derleme sonrasında açılan pencere kapatılır. Kullanıcıları ve yetkilendirmeleri oluşturmak için ASP.NET Configuration (ASP.NET Yapılandırması) seçeneğine tıklanır. Açılan Web Site Administration Tool (Web Sitesi Yönetim Aracı) içinde Security (Güvenlik) sekmesi seçilir. Eğer veritabanı sorunu yoksa alttaki sayfa gelir. Burada ayarlamaları Security Wizard (Güvenlik Sihirbazı) ile adım adım yapılabilir. Seçeneğe tıklandıktan sonra gelen bilgilendirme ekranında Next (İleri) seçeneği tıklanır.   Sonraki adımda "from internet" (internet üzerinden) seçeneği seçilir ve devam edilir. Advanced Provider Settings (Gelişmiş Sağlayıcı Seçenekleri) basamağı atlandıktan sonra Define Roles (Yetkili Grupları Tanımla) adımı gelir. Burada Enable Roles (Yetkili Grupları Etkinleştir) seçeneği işaretlenir. Next (İleri) seçilir.     Bir sonraki adımda yetkili gruplarının (Roles) oluşturulacağı bölüm gelir. Burada yetkili grubu adının girilip Add Role (Yetkili Grubu Ekle) seçilir. Sıradaki adımda isteğe bağlı olarak kullanıcılar eklenebilir. Kullanıcılar kendilerini İnternet üzerinden de kaydedebilir. Kullanıcı eklemek için kullanıcının bilgileri girilir ve Create User (Kullanıcı Oluştur) seçilir.   Sonraki adımda hangi klasörlere kimlerin ulaşıp kimlerin ulaşamayacağına dair yetkilendirme yapılır. Yetkilendirmenin yapılacağı klasör ve yetkili seçildikten sonra Allow (İzin ver) ya da Deny (Yasakla) seçilir. İşlemi tamamlamak için Add This Rule (Bu yetkilendirmeyi ekle) seçilir.   Sihirbaz ile adım adım oluşturmayı bitirdikten sonra bazı kullanıcıları ve bazı yetkilendirme sınıfları oluşturmuş olur. Security (Güvenlik) sekmesinden Manage Users (Kullanıcıları Yönet) seçilir. Gelen ekranda istenirse kullanıcı eklenir, kullanıcılar yetkilendirilir ya da silinebilir. Edit Roles (Yetkileri Düzenle) seçildikten sonra kullanıcının eklenmek istenildiği yetkili grubu seçilir. Kullanıcılar ve yetkilendirmeler oluşturulduktan sonra erişimin nasıl sınırlandırılacağı belirlenir. "Proje" altında "Controllers" klasörünün içindeki “HomeController.cs” dosyası açılır.   Burada Index() (Anasayfa) ve About() (Hakkında) dosyaları hazır olarak gelir. Bunların altına sayfalar (View) eklenebilir. Ekledikten sonra "public" (genel) komutlarının önüne [Authorize] (yetkilendir) eklenirse o sayfa için kimlik doğrulama yapılır. Bu komuta parametreler eklenerek belirli kullanıcı ya da yetki grupları haricindekilerin sayfaya erişimi engellenebilir. namespace Proje.Controllers { [HandleError] public class HomeController : Controller { public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); } [Authorize] public ActionResult About() { return View(); } [Authorize(Roles="admin")] public ActionResult AdminSayfasi() { return View(); } [Authorize(Users="kullanici1")] public ActionResult Kullanici1kisisel() { return View(); } } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Yukarıda yazılan (Roles=”admin”) sadece "admin" yetki grubundakilerin sayfaya erişimine izin verir. (Users=”kullanici1”) ise sadece kullanici1’e izin verir. Bunları HomeController.cs içine ekledikten sonra eklenen sayfa isimlerine sağ tıklanarak, “Add view…” (Görünüm ekle) seçilir. Gelen ekranda Add(Ekle) tuşuna basılır.   Projenin Views(Görünüm) klasörü içindeki "Home" klasörü içinde bulunan “Index.aspx” açılır.   Anasayfa olan (Index.aspx) içine yeni oluşturulan sayfaların bağlantısı eklenir. <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server"> <h2><%= Html.Encode(ViewData["Message"]) %></h2> <p>To learn more about ASP.NET MVC visit <a href=http://asp.net/mvc title="ASP.NET MVC Website">http://asp.net/mvc</a></p> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Views/Home/AdminSayfasi.aspx">HyperLink</asp:HyperLink> <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/Views/Home/Kullanici1kisisel.aspx">HyperLink </asp:HyperLink> </asp:Content> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Views -> Home altında oluşturulan her dosyanın içeriği istenildiği gibi ayarlanabilir. Her View() üstünde ayrı yetkilendirme yapılabilir. Kullanıcılar siteye ulaşmak istediklerinde aşağıdaki gibi bir parola ekranı ile karşılaşırlar.   Bu yazı Cem Bozkurt tarafından hazırlanmıştır. Tags: , , , | Categories: C# | Microsoft | .NET
Model View Controller (MVC), kullanıcıya yüklü miktarda verinin sunulduğu karmaşık uygulamalarda veri ve gösterimin soyutlanması esasına dayanır. Böylelikle 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. Bir MVC uygulaması gerçekleştirebilmek için bilgisayarımızda Visual Studio 2008 SP1 yüklü olması gereklidir. MVC Framework için ise bu linkten gerekli güncel dosyayı indirip yükleyebilirsiniz. Projede kullanacağımız veri tabanını aşağıdaki şekildeki gibi oluşturduk. Tablonun Identity Column (Kimlik Sütunu) özelliğine Id değerini atadık. Daha sonrasında da denemeler yapabilmek için elimizle birkaç veri girdik. File->New Project adımlarından sonra açılan pencereden ASP.NET MVC Web Application seçerek projemiz oluşturulur. Bir sonraki adımda bize test projesi isteyip istemediğimizi soracak olan pencere geldi karşımıza. Burada test projesi istemediğimizi seçtik. (Visual Web Developer sürümlerinde bu pencere bizim karşımıza çıkmayacaktır.) Böylece projemizin ilk halini yaratmış olduk. MVC Framework’ün bize sağladığı kayıt listeleme, yeni kayıt oluşturma ve kayıt düzenleme özelliklerini daha rahat görebilmek için Controllers\HomeController.cs dosyasını ve Views\Home dizinini daha sonra tekrar yaratmak üzere sildik. MVC projemizi gerçekleyebilmek için bir veritabanı bağlantısına modelini oluşturmak için ADO.NET Entity Data Model kullandık. Bu modeli ekleyebilmek için Solution Explorer’daki Models klasörü üstünde sağ tıklayarak Add New Item seçeneğini seçtik. Karşımıza çıkan ekranlarda sırasıyla; Generate From Database Choose Your Data Connection ekranında veri tabanını seçiyoruz. Choose Your Database Object ekranında table seçeneğinden kullanacak olduğumuz Araba tablomuzu seçerek işlemimizi tamamladık. Sonuçta Models dizini altında NorthwindModel.edmx adında bir dosya oluştu. Modelimizin Column Mapping (Sütun haritalandırma) bölümünde tablomuza karşılık gelen tablo aşağıda olduğu gibi otomatik olarak oluştu.   Bu sayede projemize veri tabanı bağlanmış oldu. Bu bağlantımızı MVC kullanarak formlar halinde verilerimiz üzerinde değişiklik yapabileceğiz. MVC kontrollerimizi ekleyebilmek için Solution Explorer’da Controllers klasörünün üzerinde sağ tıklayak Add->Controller adımlarını izleyerek yeni bir sınıf yaratıyoruz.   Daha önce sildiğimiz HomeController adındaki kontrolü tekrardan yarattık. Bu esnada Index, Create, Edit metotları içleri boş şekilde otomatik olarak oluşturuldu. HomeController sınıfı içinden veri tabanına bağlanabilmek için; private NorthwindEntities db = new NorthwindEntities(); kod parçacığını ekledik. Daha sonra “db” kullanarak veri tabanından gerekli veri çekme işlemini gerçekleştireceğiz. Veri tabanımızdaki verilerimizi listeleyebilmek için Index() metodunu kullandık. Bu metot aşağıdaki şekilde değiştirdik. public ActionResult Index()         {             return View(db.Araba.ToList());         } Metodun ismi üzerinde sağ tıklayarak Add View seçeneğini seçtik. Açılan ekranı aşağıdaki şekildeki gibi doldurduk. Listeleme işlemi yapacağımız için içerik olarak List seçeneğini seçtik. Bu sayede Views/Home dizini altında listeleme yapılacak Index.aspx sayfasını otomatik olarak oluşturuldu. Oluşturulan sayfa içerisindeki kodların hiç birinde değişiklik yapılmadı. Ekran çıktısı olarak bunu aldık. Yeni kayıt oluşturmak için Create() metodunu ve aşırı yüklenmiş ve sunucu post yolu ile haberleşen Create() metodunu gerçekledik. public ActionResult Create()         {             return View();         }             [AcceptVerbs(HttpVerbs.Post)]           public ActionResult Create([Bind(Exclude="Id")] Araba arabaToCreate)         {             if (!ModelState.IsValid)                 return Create();             try             {                 db.AddToAraba(arabaToCreate);                 db.SaveChanges();                   return RedirectToAction("index");             }             catch             {                 return View();             }         } View oluşturmak için Index() metodunda kullandığımız yöntemi kullanıyoruz. İçerik olarak bu kez Create seçeneğini seçtik. Bu sayede Views/Home dizini altında listeleme yapılacak Create.aspx sayfasını otomatik olarak oluşturuldu. Oluşturulan sayfa içerisindeki kodların hiç birinde değişiklik yapılmadı. Ayrıca otomatik olarak alan kontrolü yapan kontrollerde sayfamıza yerleştirilmiş durumda. Id seçeneğinde uyarı vermemesinin sebebi aşırı yüklenmiş metodu oluştururken Id değerinin otomatik artırılacağı şeklinde ayar yapmamızdı. Bu kutuya herhangi bir değer girilse dahi yeni kayıt için Id değerini en son Id değerinin bir fazlası şeklinde veri tabanına kayıt edilecektir. Kayıt düzenleme için de Edit() metodunu kullanacağız. Create’de olduğu gibi bir tane normal ve bir tane de aşırı yüklenmiş metodumuz var. Birincisi Id ‘den yararlanarak düzenlenecek olan kayıta ilişkin verileri form kontrollerine bind eder. İkincisi ise form kontrollerine bind edilmiş olan veriler üzerinde yapılmış olan değişiklikleri günceller.         public ActionResult Edit(int id)         {             var arabaToEdit = (from n in db.Araba                                where n.Id == id                                select n).First();               return View(arabaToEdit);         }           [AcceptVerbs(HttpVerbs.Post)]         public ActionResult Edit(Araba arabaToEdit)         {            if (!ModelState.IsValid)            return View();            try            {               var arabaEdit = (from m in db.Araba                        where m.Id == arabaToEdit.Id                        select m).First();               db.ApplyPropertyChanges(arabaEdit.EntityKey.EntitySetName, arabaToEdit);               db.SaveChanges();                 return RedirectToAction("Index");             }             catch             { return View(); }         }   Diğer metotlarda olduğu gibi View’imizi oluşturduk. İçerik olarak bu kez Edit seçeneğini seçtik. Bu sayede Views/Home dizini altında listeleme yapılacak Edit.aspx sayfasını otomatik olarak oluşturuldu. Oluşturulan sayfa içerisindeki kodların hiç birinde değişiklik yapılmadan aşağıdaki çıktıyı aldık. Tags: , | Categories: .NET