Osman KURT

Kendime Not

MVC Projelerde Login Kontrolü Yapma Authorize Kullanımı

Bir proje yaptık ve admin panelimiz var yada kullanıcı girişi olduğunu varsaydığımız herhangi bir yer. Bunu ya session yada cookie kullanarak sağlarız. İf koşulumuzu koyarız ve yolumuza devam ederiz. Şimdi şöyle bir durum var. MVC de sayfalar actionresult'lardan oluşmakta hepsi için tek tek if mi yazacağız tabiki hayır. Gerekli gördüğümüz yerde yazabiliriz tabiki ama bir admin paneli için bunu te tek yazmak yazılım hammallığından başka birşey değil tabiki.

Gelelim bu olayı tek bir kod bloğu ile nasıl yapacağımıza. MVC bize authorize diye bir nimet sunmuş ve bunu istediğimiz gibi editlememize olanak sağlamış.

İlk yapmamız gereken kendimize bir class tanımlamak ve bu classı MVC de AuthorizeAttribute sınıfından türetmek. olacak. Daha sonra bu classımızın içine bize bool değer döndüren bir overried bir method yazıyoruz ve if koşulumuzu burada sağlıyoruz. Duruma göre True yada False döndürerek işlemimizin gerçekleşmesini sağlayacağız ve controller'a kullanıcının erişim hakkının olup olmadığını sağlayacağız.

Kod bloğumuz alt kısımda ki gibi;

public class UserAuthorize : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (httpContext.Request.Cookies["osmankurtnet"] != null)
            {
                return true;
            }
            else
            {
                httpContext.Response.Redirect("/Yonetim/Login/Index");
                return false;
            }

        }
    }

Authorize kodumuzu tamamladığımıza göre sıra onu controller alanımızda kullamaya geldi. Onuda alt kısımda ki gibi kullanıyoruz.

[UserAuthorize]
public class AdminController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
 }

Bu kodumuzu da bu şekilde kullanıyoruz ve istediğimiz şekilde sisteme giriş yetkisi verebiliyor yada engelleyebiliyoruz.

Görüşmek üzere

Osman KURT
Yazılım Uzmanı

Yorumlar (11) -

  • Nazım Mert Bilgi

    8.7.2015 14:10:40 | Yanıtla

    Teşekkürler , işime yaradı.

  • murat can oluklu

    23.6.2016 01:11:44 | Yanıtla

    Teşekkürler....

  • Efe

    25.12.2016 20:46:17 | Yanıtla

    Teşekkürler.Yoksa çok if ile kontrol ederdim.

    • Osman KURT

      26.12.2016 20:42:36 | Yanıtla

      Merhaba Efe,
      Sorun çözüldüyse süper Smile

  • Kaan Öztürk

    14.1.2017 02:19:59 | Yanıtla

    osman bey, teşekkürler. Bilal'e anlatır gibi anlatmışsınız sade ve açık. peki cookies ve session konusunda bir sorum var; biliyoruz ki session ile tuttuğumuz değerler sunucuda, cookies ile tuttuğumuz değerler istemcinin makinasında tutuluyor. bazen bazı sitelere girince sağdan soldan "biz çerez kullanıyoruz" diye uyarı çıkarıyorlar. bunu özellikle kullanıcıya bildirmenin mantığı nedir ?

    • Osman KURT

      16.1.2017 10:35:07 | Yanıtla

      Rica ederim,
      Bazı sitelerde değil aslında, cookie kullanılan bütün sitelerde bunun kullanıcıya bilgi olarak verilmesi yasal bir zorunluluk.

  • Kaan Öztürk

    14.1.2017 02:31:52 | Yanıtla

    bir de, rollerimiz var. mesela  oturum açmamış kişinin girebileceği sayfalar, oturum açmış kişinin girebileceği sayfalar, oturum açsa da açmasa da giremeyeceği sayfalar (mesela yönetici sayfası) bir çok durumu authorize ile nasıl yapabiliriz ?

    • Osman KURT

      16.1.2017 10:36:44 | Yanıtla

      Session nesnemiz için de oluşturacağımız bir flag ile kullanıcının türünü belirleriz. Sonrasın da db üzerinden tuttuğumuz roller ile ilişilendirir, hangi sayfaya girmesini istiyorsak sadece o sayfalara izin veririz. Ancak dediğim gibi biryerde saklanması lazım bunların.

  • samet

    27.3.2017 11:42:58 | Yanıtla

    Merhaba,

    Cookie kullanrak login olup index'imde viewbag ile  kullanıcı adını gösterebilyiorum fakat,

    _layout sayfamda kullanıcı adını ve o kullanıcıya ait fotoğrafı nasıl göstereceğim?

    Yardımlarınızı Beklemekteyim..

    • wasd

      24.6.2019 06:24:53 | Yanıtla

      Session["UserName"] 'e kullanıcı adını atarsan layoutta vs. kullanırsın

  • Taner

    16.5.2018 22:42:32 | Yanıtla

    Teşekkürler...

Loading