MVC’de en çok kullanılan ve karşılaşılan kavramlardan biri olan Attribute’ler sayesinden işlerimizi çok kısa süre içerisinde görebilmekteyiz bu makalemizde kendi attribute’lerimizi nasıl tanımlayabileceğimizi göreceğiz.
MVC ile kendi Attribute’lerinizi oluşturma
Bu makalemizde giriş açıklamasında belirtmiş olduğumuz gibi MVC’de kendi attribute’lerimizi nasıl oluşturacağımızı göreceğiz Attribute örneğimizi yetki üzerine yapacağız belirletiğimiz Controller veya Action’lara yetki attribut’ünü ekleyerek yetkisiz işlemleri engelleyeceğiz. şimdi başlayacalım öncelikle Yetki Attribute’ü için Yetki adında bir class oluşturuyorum ve ActionFilterAttribute sınıfını inherit(kalıtım) ediyorum Yetki sınıfıma alttaki koddada gördüğünüz gibi;
1 2 3 4 5 6 7 8 9 10 11 | public class Yetki : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { if (HttpContext.Current.Session["yetki"] == "0") { filterContext.Result = new RedirectResult("~/Home/Index"); } base.OnActionExecuting(filterContext); } } |
Ben burada basit bir mantıkla session’daki yetki değeri 0 ise Index’e yönlendiriyorum Session değerinide deneme için projenizdeki Global.asax dosyasında Session_Start metodu içerisine Session[“yetki”] = 0; değeri atarayak test ediyorum eğer 0 değilde 1 atasaydık Yetki attribute’ünü eklediğimiz Controller veya action’lar yetkisi varmış gibi düşünüp sayfalara ulaşılmasını sağlayacaktır burada siz projenizde 0-1 ile değilde örnek veri tabanında yetki ile alakalı bir tablonuz bulunuyordur oradaki yetkilere bağlı olarak Yetki classı içerisinde session’daki kullanıcının gerçek id’sini alarak veritabanı kontrolü yaparsınız yetkinin olup olmadığı kontrol eder öyle ulaşmasını sağlarsanız bizim bu örnekteki amacımız sadece mantığı anlatabilmektir.
1 2 3 4 | protected void Session_Start() { Session["yetki"] = "0"; } |
Şimdi Yetki adlı Attribute’ümüzün kullanımı görelim.
Controllere’a yetki eklemek için alttaki kodu kullanabilirsiniz;
1 2 3 4 5 6 7 8 | [Yetki] public class CategoriesController : Controller { public ActionResult Index() { return View(); } } |
Contoller’e yetki attribute’ünü eklerseniz attribute’ü eklediğinizi controller’daki tüm action’larınızda geçerli olacaktır.
Fakat alttaki gibi bir kullanımda sadece Create Action’undan Yetki attribute’ü geçerli olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class CategoriesController : Controller { public ActionResult Index() { return View(); } [Yetki] public ActionResult Create() { return View(); } } |