folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder ASP.NET Mvc De Authorized In Rol Özelliğini Kullanmak



ASP.NET Mvc De Authorized In Rol Özelliğini Kullanmak

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hannibal_King
    Hannibal_King's avatar
    Kayıt Tarihi: 22/Ağustos/2010
    Erkek

    Mvc 5 teki hazır üyelik sistemini kullanmıyorum. Proje başlarken hiç yaratılmasın dedim yani.Users diye bir sınıf yazdım kullanıcı adı ve şifre var kullanıcı istek yapınca controllerda bakıyorum eğer veritabanında varsa kullanıcı adı ve şifre FormsAuthentication.SetAuthCookie(kullaniciadi , false); diyerek  cookie yaratıyorum. Bazı methodların baş kısmınada [authorized] yazdım üyelik gerektiren alanları bu şekilde yaptım.Ancak authorized in role özelliğini kullanmak için ne yapmam lazım?


    lrny.app
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hannibal_King
    Hannibal_King's avatar
    Kayıt Tarihi: 22/Ağustos/2010
    Erkek

    yeni yeni anliyorum role provider sinifinda getrolesforusers diye bir fonksiyon var.biz bir controllerın tepesine yada actionmethod un uzerine 

    [authorized(roles="admin")] falan yazarsak bu getrolesforusers direk cagrilio.bu kendi kendine cagriliomus.onu farkettim. bizim yapmamiz gerekende bu getrolesforusers fonksiyonunu override etmek.bunun icine istedigimizi yazmak arastirmaya devam ediorum konuyla ilgili her türlü bilgiye açım.en son tespitlerimi topluca yazicam mvc ye yeni baslayan arkadaslar icin


    lrny.app
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    yeni gordum sorunu hocam aynen oyle yapiyorsun,hatta username yazarak bile erisim verebilirsin. bu authorized in da customization u var, evde olsam ornek gonderirdim.. custom ile daha genis bir kontrol saglayabilirsin

    edit: bu almanca klavyeye de bi alisamadim, 

    unbalanced tarafından 16/Tem/15 12:21 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hannibal_King
    Hannibal_King's avatar
    Kayıt Tarihi: 22/Ağustos/2010
    Erkek

    @unbalanced hocam dediğin şekilde authorized in de customization olayına baktım anladım olayı. Bu linkten okudum http://stackoverflow.com/questions/23055403/asp-net-mvc-user-authorize-in-controller burda adam verdiği örnekte her defasında database e gidiyo bu biraz sacma değilmi bi controllerın tepesine yada action method un tepesine custom bir authorized yazıcam sonra her gelen istekte ,ilgili authorized metodu calıscak metodun içindede veritabanına gitmiş bu linkteki örnekte.Onun yerine bi cookie yada sessiondan okusa daha mantıklı olmaz mı?

    Birde custom role olayında getRolesForUsers metodunun çalışma seklini çözdüm ancak diğer metodlara bakamadım pek MembershipProvider ve RoleProvider sınıflarında yer alan diğer metotlar hangi durumlarda tetikleniyor ??

    Ayrıca debug atarak denedim 4-5 defa public override string[] GetRolesForUser(string username)  bu fonksıyon 2 defa arka arkaya çalışıyor.Eğer döndürdüğü string dizisinde method için gerekli rol varsa 1 kere çalışıyor.Ancak döndürdüğü rol dizisinde işe yarar rol yoksa aynı method tekrar çagrılıyor.


    lrny.app
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MaviGozluDev
    MaviGozluDev's avatar
    Kayıt Tarihi: 05/Eylül/2005
    Erkek

    yazayımda konuyu kaybetmeyeyim. gece 12 den sonra eve gelince ufak bir örnekvari bir şey yollayayım geç olmadıysa..
    Gerçi geç olduysa da daha sonra bu konuyu arayan biri görür gene iş görülür :) 


    .
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    dolarkuru
    dolarkuru's avatar
    Kayıt Tarihi: 25/Ocak/2014
    Erkek

    hocam mvc de yeniyim bende sorduğun olayı az çok anladım fakat kodları paylaşabilir misin sorun olmazsa veya örnek kod varsa elinde ?

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hannibal_King
    Hannibal_King's avatar
    Kayıt Tarihi: 22/Ağustos/2010
    Erkek

    Yarın yazayım hocam yaptığım tespitleri ve anladığım yerleri kodlarla birlikte.

     

    Hannibal_King tarafından 20/Tem/15 03:02 tarihinde düzenlenmiştir

    lrny.app
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MaviGozluDev
    MaviGozluDev's avatar
    Kayıt Tarihi: 05/Eylül/2005
    Erkek

    Şimcik..
       Bu yetki kontrolü yapmak istediğimiz Controller başına ya da Action başına yazdığımız [Authorize] zımbırtısı Controller/Action çalıştırılmadan bi çalışıyor. Temel olarak , doğrulama başarılı olursa Controller/Action çalışıyor, false gelirse çalışmıyor.  
       Bu kontrolü rol adları , yetki adları vs gibi şeylere göre yapabiliyoruz. Genelde örneklerde
    [Authorize(Roles="Admin"] olarak geçiyor. Authorize yerine kendi isimlendirdiğimiz halini kullanalım. Mesela, [TmzDemoYetkilendirme(TDEylemErisimIslemi = "{DB93B6CB-8320-4082-A9D2-13D03B239BBF}")] Niye Rol, Yetki vs gibi isim kullanmadığımızı da o kısımda göreceğiz.

       Kendi kullandığımız şekliyle örnek koyayım. Senaryomuz düz mantıkla şöyle,
       - kullanıcı login oluyo, şifre hede hödö doğruluk kontrolü yapılıyor sonucunda kullanıcının rollerini, ardından bu rollere bağlı yetkileri çekip session a gömüyoruz.
       - Yekilendirme için kullancağımız bi sınıf ekliyoruz. (örnekte, TmzDemoYetkilendirme). Bunu “AuthorizeAttribute” ten türetip resimlerdeki gibi “AuthorizeCore” u override ediyoruz.
       - Yetki kontrolü yapmak istedimiz Controller/Action dan önce kontrolümüzü yapıyoruz. (Örnekte ki hali =>
    [TmzDemoYetkilendirme(TDEylemErisimIslemi = "{DB93B6CB-8320-4082-A9D2-13D03B239BBF}")]

    Resimlerle örnekleyelim;

    Resim : DB tarafı


    DB tarafı : Rol tablomuz, Ekranlar için tablomuz(EkranEylem tablosu) ve bu iki tablonun eşleştirildiği bir tablomuz var.(EkranEylem_Rol. Aşağıdaki tablo, adı tam çıkmamış) Kullanıcının sahip olduğu rollerin yetkisi olan ekranları bu şekilde belirleyebiliyoruz. Böyle ara tablo vs yerine direk admin, kullanıcı vs gibi rol adları üzerinden de yetki kontrolü yapabiliriz aslında ama onun yerine EkranEylem tablosundaki “KimlikBilgisi” alanına bir guid basıp, bir rol için bir Action’a yetki ekleneceği zaman kodu açıp o Action’ın başına rol adı vs ekleme yapıp dekrar deploy atmaktansa , koda girmeden veritabanı üzerinden “X Rol_ID li kişiye Y EkranEylemID li 54xx54-xs6x6s7-x7sx yetkisini ver” işlemini yapabiliriz 

    Velhasıl gelelim kod tarafına. Önce bi login olalım.
    Resim Login - Session

    Login - Session : Login in post işleminde görüldüğü gibi Kullanıcının rolünü ve yetkiListesi olarakta o role ait yetkileri sessiona alıyoruz.  

    Resim : RoleBagliYetkiler

    RoleBagliYetkiler : Rol_ID ile gidip Role bağlı yetkilerin, EkranEylem tarafındaki “KimlikBilgisi” bilgisini alıyoruz. Doğrulamayı bu alan üstünden yapıyoruz çünkü.

    Resim : Custom sınıfımız

    Custom sınıfımız : Yetki kontrolümüzü yapacağımız kendimize ait sınıfı resimdeki gibi ekliyoruz. Tabi bunu “AuthorizeAttribute” ten türetiyoruz. İçerisinde kontrol edeceğimiz değeri barındırsın diye bi yavrucak tanımlıyoruz. (Örnekte bu yavrucak “TDEylemErisimIslemi” )
    Burada
    AuthorizeCore(HttpContextBase httpContext) ve HandleUnauthorizedRequest(AuthorizationContext filterContext)  metotları var. Bunları override edicez sadece. AuthorizeCore yetki kontrolünü yaparken yapılacak şeyleri içerecek, “HandleUnauthorizedRequest” ise adı üstünde yetkisi olmayan yerlere gelen istekleri handle etmek için kullanacağımız yer. Artık kişiselleştirmek vs bize kalmış, sağına soluna bir şeyler ekleyerek vs J


    Biraz hızlı oldu örnek, anca vakit bulabilip yazabildim kusura bakmayınuz. Eve geç gelip bir de film izleme sözüm olunca hızlı hızlı anca bu akdar hazırlayabildim bir şeyler. 

    Eksik ya da atladığım , adam gibi açıklayamadığım yer olursa sorar işi düşüpte bunu okuyan mürit :)
    Şunu niye böyle yapıyon la mal şöyle yapsana daha mantıklı diyen varsa oda uyarırsa sevinirim :) Ek bilgi ek bilgidir :)


    .
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    rappermcs
    rappermcs's avatar
    Kayıt Tarihi: 04/Ekim/2002
    Erkek

    Çok detaya boğulmak istemeyenler için webmatrix membership provider tavsiyemdir. oldukça basit bir kullanımı var.

    https://www.google.com.tr/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#q=webmatrix+membership+provider

     


    Paslanmış bir uygulama geliştirici.. ##
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    dolarkuru
    dolarkuru's avatar
    Kayıt Tarihi: 25/Ocak/2014
    Erkek
    MaviGozluDev bunu yazdı

    Şimcik..
       Bu yetki kontrolü yapmak istediğimiz Controller başına ya da Action başına yazdığımız [Authorize] zımbırtısı Controller/Action çalıştırılmadan bi çalışıyor. Temel olarak , doğrulama başarılı olursa Controller/Action çalışıyor, false gelirse çalışmıyor.  
       Bu kontrolü rol adları , yetki adları vs gibi şeylere göre yapabiliyoruz. Genelde örneklerde
    [Authorize(Roles="Admin"] olarak geçiyor. Authorize yerine kendi isimlendirdiğimiz halini kullanalım. Mesela, [TmzDemoYetkilendirme(TDEylemErisimIslemi = "{DB93B6CB-8320-4082-A9D2-13D03B239BBF}")] Niye Rol, Yetki vs gibi isim kullanmadığımızı da o kısımda göreceğiz.

       Kendi kullandığımız şekliyle örnek koyayım. Senaryomuz düz mantıkla şöyle,
       - kullanıcı login oluyo, şifre hede hödö doğruluk kontrolü yapılıyor sonucunda kullanıcının rollerini, ardından bu rollere bağlı yetkileri çekip session a gömüyoruz.
       - Yekilendirme için kullancağımız bi sınıf ekliyoruz. (örnekte, TmzDemoYetkilendirme). Bunu “AuthorizeAttribute” ten türetip resimlerdeki gibi “AuthorizeCore” u override ediyoruz.
       - Yetki kontrolü yapmak istedimiz Controller/Action dan önce kontrolümüzü yapıyoruz. (Örnekte ki hali =>
    [TmzDemoYetkilendirme(TDEylemErisimIslemi = "{DB93B6CB-8320-4082-A9D2-13D03B239BBF}")]

    Resimlerle örnekleyelim;

    Resim : DB tarafı


    DB tarafı : Rol tablomuz, Ekranlar için tablomuz(EkranEylem tablosu) ve bu iki tablonun eşleştirildiği bir tablomuz var.(EkranEylem_Rol. Aşağıdaki tablo, adı tam çıkmamış) Kullanıcının sahip olduğu rollerin yetkisi olan ekranları bu şekilde belirleyebiliyoruz. Böyle ara tablo vs yerine direk admin, kullanıcı vs gibi rol adları üzerinden de yetki kontrolü yapabiliriz aslında ama onun yerine EkranEylem tablosundaki “KimlikBilgisi” alanına bir guid basıp, bir rol için bir Action’a yetki ekleneceği zaman kodu açıp o Action’ın başına rol adı vs ekleme yapıp dekrar deploy atmaktansa , koda girmeden veritabanı üzerinden “X Rol_ID li kişiye Y EkranEylemID li 54xx54-xs6x6s7-x7sx yetkisini ver” işlemini yapabiliriz 

    Velhasıl gelelim kod tarafına. Önce bi login olalım.
    Resim Login - Session

    Login - Session : Login in post işleminde görüldüğü gibi Kullanıcının rolünü ve yetkiListesi olarakta o role ait yetkileri sessiona alıyoruz.  

    Resim : RoleBagliYetkiler

    RoleBagliYetkiler : Rol_ID ile gidip Role bağlı yetkilerin, EkranEylem tarafındaki “KimlikBilgisi” bilgisini alıyoruz. Doğrulamayı bu alan üstünden yapıyoruz çünkü.

    Resim : Custom sınıfımız

    Custom sınıfımız : Yetki kontrolümüzü yapacağımız kendimize ait sınıfı resimdeki gibi ekliyoruz. Tabi bunu “AuthorizeAttribute” ten türetiyoruz. İçerisinde kontrol edeceğimiz değeri barındırsın diye bi yavrucak tanımlıyoruz. (Örnekte bu yavrucak “TDEylemErisimIslemi” )
    Burada
    AuthorizeCore(HttpContextBase httpContext) ve HandleUnauthorizedRequest(AuthorizationContext filterContext)  metotları var. Bunları override edicez sadece. AuthorizeCore yetki kontrolünü yaparken yapılacak şeyleri içerecek, “HandleUnauthorizedRequest” ise adı üstünde yetkisi olmayan yerlere gelen istekleri handle etmek için kullanacağımız yer. Artık kişiselleştirmek vs bize kalmış, sağına soluna bir şeyler ekleyerek vs J


    Biraz hızlı oldu örnek, anca vakit bulabilip yazabildim kusura bakmayınuz. Eve geç gelip bir de film izleme sözüm olunca hızlı hızlı anca bu akdar hazırlayabildim bir şeyler. 

    Eksik ya da atladığım , adam gibi açıklayamadığım yer olursa sorar işi düşüpte bunu okuyan mürit :)
    Şunu niye böyle yapıyon la mal şöyle yapsana daha mantıklı diyen varsa oda uyarırsa sevinirim :) Ek bilgi ek bilgidir :)

    attribute sınıfı nasıl yazılır ona bi bakmam gerek onun dışında anladım hocam daha önce attribute sınıfı yazmamıştım.  onun dışında mantığı anladım saol hocam :)

  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hannibal_King
    Hannibal_King's avatar
    Kayıt Tarihi: 22/Ağustos/2010
    Erkek

    @MaviGozluDev hocam gayet güzel açıklamış.Bende bişeyler yazacaktım ama gerek kalmamış gayet net anlatmış.1-2 soru sorayım bende.

    1-) Login metodunda argüman olan string returnUrl kısmındaki returnUrl nerden geldi onu biz nerde tanımladık.Sistem nasıl anladı returnurl i

    2-)kullanıcı başarı ile login olduktan sonra kullanıcı hakkında ekstra verılerı session da tuttuk.Ancak session ın bir timeout süresi var ve bu süre 20 dakika olsa eğer kullanıcı 19. dakikada site ile etkileşime girse dahisession kesinlikle yok olur diye biliyorum.Yani kendi kendine yenilenmiyor diye biliyorum.Bunun yerine formsauthentication extension isimli paketi indirdim nugettan.Bunda setauthcookie derken daha fazla parametre giriyoruz.Saklamak istediğimiz verileride koleksiyon şeklinde setauthcookie ye argüman olarak veriyoruz.Bunu denedim gayet güzel calısıo. ama sessionları kontrol etmeliyiz bence eger nullsa tekrar veritabanından verılerı cekmek lazım.


    lrny.app
Toplam Hit: 1250 Toplam Mesaj: 11
mvc üyelik sistemi