Çözüldü C# Formda kullanıcıya yetki verme

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

khalannz7

Centipat
Katılım
18 Ağustos 2022
Mesajlar
531
Çözümler
7
Yer
İstanbul
Daha fazla  
Cinsiyet
Erkek
Merhaba, kullanıcının ürün, çalışan vs. gibi şeyleri CRUD yapabileceği bir Windows form uygulaması geliştirdim. Geriye giriş ekranı oluşturup kullanıcılara yetki vermem kaldı. Bunun için şöyle düşündüm; veritabanımda giriş ve yetki tablosu oluşturacağım. Giriş tablomda ID, kullaniciadi, sifre ve yetki_ ID olacak. Yetki tablomda ID ve yetki olacak. Ve bunları ilişkilendireceğim. Ama eğer bu yöntemim doğruysa yetkiye göre hangi sayfaları açabildiklerini nasıl ayarlayacağım?
 
Çözüm
Önce giriş yapan kullanıcının eğer giriş başarılı ise model sınıfında yeni bir değişken tanımlayıp ona atadım. Sonra o modeli ana forma taşıdım. Roller kısmında her sayfaya bit değeri verdim, kullanıcının giriş izni varsa 1 yoksa 0 olacak. Sonra if kullanarak "eğer bu sayfaya giriş izni 1 ise aç yoksa yetkiniz yoktur mesajı göster" gibisinden bir kod yazdım. Önceden yapmıştım ama bugün görünce yazdım. Eğer ihtiyacı olan olursa diye yazayım dedim.
@khalannz7 hocam o zaman en üste 3 tane buton koyarsınız tabii bundan önce kullanıcıya giriş yaptırmanız lazım yine mantık aynı üç adet kullanıcımız olsun üstdüzeyadmin giriş yapınca her yere erşsin ortadüzeyadmin sadece ekleme kısmına erişsin alt düzey ise hiçbir şey yapamasın mesela hocam bu ara eğer çözümünüze yardımcı olduysam çözüm olarak raporlamayı unutmayın emin olunki kolay bir şey.

@khalannz7 hocam?
Yapamadım hocam :(
 
@khalannz7 hocam neden hata alıyorsunuz yazın yardımcı olama çalışayım.

Hocam öncelikle kusura bakmayın geç cevap verdiğim için size :( hata almıyorum şu an hocam login erkanını procedurlerini CRUD işlemlerini falan yazıyordum. Yetki kısmına yarın devam edeceğim. Ama hala anlamadım tabcontrol ayrı bir form değil bir sekme. Aynı formun içindeki sekmelere kullanıcının girmesini nasıl engelleyebilirim anlamış değilim.
 
@khalannz7 hocam onun için önce kullanıcıya giriş yaptirin az önce de yazdığım gibi adı ortaduzeyadmin olan kişiyi mesela güncelle kısmına sokmayın normalde kodları atardım ama Linux kullanıyorum belki bugün Windows'a geçerim o zaman size kodları atarım ama söz vermiyeyim ve size yardımcı olduysam çözüm olarak rapor etmeyi unutmayın kolay gelsin.
 
@khalannz7 hocam onun için önce kullanıcıya giriş yaptirin az önce de yazdığım gibi adı ortaduzeyadmin olan kişiyi mesela güncelle kısmına sokmayın normalde kodları atardım ama Linux kullanıyorum belki bugün Windows'a geçerim o zaman size kodları atarım ama söz vermiyeyim ve size yardımcı olduysam çözüm olarak rapor etmeyi unutmayın kolay gelsin.

Teşekkür ederim hocam ama zaten mantığı biliyorum giriş yapan kullanıcıya göre girmesine izin vermeyeceğim sorun bu değil ama main formda bunu nasıl yazacağım sorun bu.
 
@khalannz7 hocam 🤣 ben hala anlamadım sorunu tam.

Benim kod yazmaktan beynim durdu herhalde :D baştan bir daha anlatayım. Ana formumda tabcontrol var, ürün ekleme kullanıcı ekleme vs bütün her şey bu tabcontrolun altında. İstiyorum ki otaduzeyadmin her yere giremesin. Formlarla yapıp saklamakta istemiyorum. Kullanıcıda orası gözüksün ama tıkladığında giremezsiniz hatası versin.
 
Merhaba, öncelikle yapmak istediğiniz yetkilendirme işlemini UI tarafında yapmak hiç mantıklı değil. Bu sorun yaşamanıza neden olacaktır (Teorik olarak sorun yaratmasa da ileride kafanızı karıştırabilir).

Veritabanınıza "OperationClaims" tablosu ekleyip her operasyon için bir rol atayabilirsiniz. Örneğin: "ManageProducts". Bu yetkiye sahip olan kimseler sadece ürünleri yönetebilir. Tedirkçi için falan ayrı yetkiler oluşturabilirsiniz. Bu işlem sonrasında Kullanıcılar tablosunda bir sütun ekleyip o kullanıcıya ait OperationClaim'lerin tutulmasını sağlayabilirsiniz. İster bir string ister bir integer Enumerable'ı ile.

Ardından uygulamanıza Global olarak erişilebilir (Singleton) bir Yetkilendirme aracı yazmanız gerek. İsterseniz hazır paket de kullanabilirsiniz tabii size kalmış. Burada rolleri barındırıp her işlem öncesi rol kontrolü yapabilirsiniz. Bu aşamada da kod yazmanızı rahatlatmak için Dinamik Proxy'ler ile Interception yapabilirsiniz. Bununla alakalı bir makalem mevcut. Okumanızı öneririm.
 
Merhaba, öncelikle yapmak istediğiniz yetkilendirme işlemini UI tarafında yapmak hiç mantıklı değil. Bu sorun yaşamanıza neden olacaktır (teorik olarak sorun yaratmasa da ileride kafanızı karıştırabilir).

Veritabanınıza "operationclaims" tablosu ekleyip her operasyon için bir rol atayabilirsiniz. Örneğin: "manageproducts". Bu yetkiye sahip olan kimseler sadece ürünleri yönetebilir. Tedirkçi için falan ayrı yetkiler oluşturabilirsiniz. Bu işlem sonrasında kullanıcılar tablosunda bir sütun ekleyip o kullanıcıya ait operationclaim'lerin tutulmasını sağlayabilirsiniz. İster bir string ister bir integer Enumerable'ı ile.

Ardından uygulamanıza global olarak erişilebilir (singleton) bir yetkilendirme aracı yazmanız gerek. İsterseniz hazır paket de kullanabilirsiniz tabii size kalmış. Burada rolleri barındırıp her işlem öncesi rol kontrolü yapabilirsiniz. Bu aşamada da kod yazmanızı rahatlatmak için dinamik Proxy'ler ile ınterception yapabilirsiniz. Bununla alakalı bir makalem mevcut. Okumanızı öneririm.

Hocam şu an UI tarafından yapıyorum daha stajyerim adım adım ilerliyoruz :D teşekkür ederim ilginiz için.
 
Hocam olay şu ki farklı formlarla yapmak yerine tabcontrol kullanarak tasarlardım uygulamayı :( yani sekme şeklinde. İstediğim de şu mesela müdür her şeyi yapabiliyor iken orta düzey admin sadece ürün ekleyebilecek düşük seviye admin sadece tedarikci ekleyebilecek vs.
Userlara rol eklediysen rolün yetkilerini getirip yetki kontrol yap. Tuşları ona göre gizle, göster yada işlevlerini değiştir. Mesela giriş yapan rolün read yetkisi yoksa ve veriyi listelediğin select yaptığın bir yere giriyorsa, form load eventinde bunu tespit edip uyarı verdirip formu kapatabilirsin. Yada mesela insert işlemi yapacağın zaman rol check yapıp insert yetkisi yoksa uyarı verdirip insert yapmadan fonksiyondan return atabilirsin.
@khalannz7 hocam o zaman en üste 3 tane buton koyarsınız tabii bundan önce kullanıcıya giriş yaptırmanız lazım yine mantık aynı üç adet kullanıcımız olsun üstdüzeyadmin giriş yapınca her yere erşsin ortadüzeyadmin sadece ekleme kısmına erişsin alt düzey ise hiçbir şey yapamasın mesela hocam bu ara eğer çözümünüze yardımcı olduysam çözüm olarak raporlamayı unutmayın emin olunki kolay bir şey.

@khalannz7 hocam?
Mantıklı bi çözüm değil, birincisi tasarımı değiştirmeyi zorlaştırır, ikincisi müşteri yeni rol oluşturursa ve bu role de farklı yetkiler vermek istiyorsa ne yapacaksın? Her seferinde projede yeni button mu oluşturacaksın? Bu tarz işler dinamik yapılmalı.
 

Geri
Yukarı