C# Ta Giriş Yapan Kullanıcıya yetki tanımlama

Bu konuyu okuyanlar

ekremyigiter

Öğrenci
Katılım
15 Kasım 2017
Mesajlar
15
Reaksiyon puanı
0
Puanları
1
Yaş
35
C# Ta Giriş Yapan Kullanıcıya yetki tanımlama örneği elinde olan var mı?
 

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
Merhaba,

biraz daha detay verebilir misiniz lütfen ? Bu bahsettiğinizin önü çok açık. Hangi alanda yetki ? Windows kullanıcı yetkileri mi, yoksa sizin yazmış veya yazacağınız bir programa ait ekstra giriş tanımlamaları için yazılmış bir modüle ait bir tanımlama mı (Konfigürasyon dosyası içermelidir), yoksa bir server'a giriş için mi bir tanımlama vs. vs.

Detay verirseniz diğer üye arkadaşlar da sanırım yardımcı olabilir.

Saygılarımla
 

ekremyigiter

Öğrenci
Katılım
15 Kasım 2017
Mesajlar
15
Reaksiyon puanı
0
Puanları
1
Yaş
35
Yanıtınız için teşekkürler

c# çek/senet programı geliştiriyorum. yazdığım programı çalıştırdığımda kullanıcı bilgileri girilerek Kontrol Panelini açıyorum.

1-Hangi kullanıcı giriş yaptıysa kullanıcı adının kontrol panelinde sağ üstte bir label e yazımasını istiyorum.
2-Bu programda kullanıcı ayarları formu var. burada kullanıcı oluştururken (örn; AYSE) bazı izin tanımlaması yapmak istiyorum. AYSE kullanıcısına Bankalar ve Kredi Bilgileri butonlarını kapalı olarak tanımlarsam bu butonları göremeyecek gizlenecek yada görebilecek fakat buttonBankalar.Enabled =false; olacak. eklediğim her kullanıcı için istediğim tanımlamayı yapabilmek istiyorum.

Veri tabanı olarak Access kullanıyorum.
 

Ekli dosyalar

  • 1.png
    1.png
    128.8 KB · Görüntüleme: 1,475

errno

Doçent
Katılım
17 Temmuz 2016
Mesajlar
694
Reaksiyon puanı
567
Puanları
93
Merhaba,

Kullanıcıların local mi, domain üzerinde mi, yoksa network içerisinde domain olmadan olan bir yapılandırma mı değil mi herhangi bir bilgilendirme vermemişsiniz. Ancak yine de size fikir vereceğim.

ilk sorunuzu anlamadım. Çünkü bir label'a giriş başarılıysa ismi atanır ve istenilen yere pozisyonu alınır. Bunun dışında demek istediğinizi anlamadım.

İkinci sorunuz tamam ama planlama yarım kalmış. Bir programınız var ve sadece bu programa ait bir yetki tanımlaması yapılabilecek bir modül geliştirmak istiyorsunuz. Planlamasını yapmamışsınız anladığım kadarıyla. Bu yüzden aşağıda önerilerimi yazacağım ve buna göre aklınızda bir fikir oluşturmaya çalışacağım. Geri kalan kısmı konuşulur.

1- Sadece programa ait kullanıcı yetkilendirme geliştirilmesi :

Amacımız bir Xml dosyası üzerinden kullanıcı yetkilerini okumak ve bu Xml dosyasına göre kullanıcı yetkilerini çalışma anında işlemek. Bir Solution açın ve iki adet Class Library projesi oluşturun. Birincisinin Adı "User.Core" diğeri ise "User.Data" olarak adlandırın.

Kod:
<User name="test_user_1">

  <Form>
     <Yetki FormAdi="Form1" durum="1"/>
     <Yetki FormAdi="Form2" durum="0"/>
  </Form>

<Button>
     <Yetki ButtonAdi="CekSenet" durum="1"/>
     <Yetki ButtonAdi="Sil" durum="0"/>
  </Button>

</User>

<User name="test_user_2">

  <Form>
     <Yetki FormAdi="Form3" durum="1"/>
     <Yetki FormAdi="Form4" durum="0"/>
  </Form>

<Button>
     <Yetki ButtonAdi="Bankalar" durum="0"/>
     <Yetki ButtonAdi="KrediDuzenle" durum="0"/>
  </Button>

</User>

Burada sizin için temsili bir Xml dosyası yazdım. Bu Xml dosyası bize çalışma anındaki yetkilendirme konusunda bilgi verecek. "User.Data" projesindeki Class1 dosyasını silip "SourceAuthorization" adında bir sınıf oluşturun. Bu sınıf içerisinde sadecen Xml dosyasını okuma yapacaksınız.
Xml okuma yapan kodlarınızı bu sınıf altında "Source" adında bir methoda yazın.

"User.Core" projesindeki Class1 dosyasını silip yerine "AuthorizationManager" adında bir sınıf oluşturun ve aynı sınıf içerisine "GetAuthorization" adında bir method yazın. "User.Core" projenize "User.Data" projenizi referans olarak ekleyin. "User.Core" projenizide sizin kendi projenize ekleyin. "User.Core" projesindeki "AuthorizationManager" sınıfından bir instance alıp "GetAuthorization" methodu ile Xml verileri çekin. Şimdi kendi projenizde artık Xml veriler ve kullanıcılar hakkında bilgiler mevcut. Buna göre düğmelerinizi Enable/Disable işlemlerini kolaylıkla yapabilirsiniz. Veya kullanıcının açmaması gereken formları da tanımlayıp buna göre kullanıcılar üzerindeki yetkilendirme işlemlerinizi işleyebilirsiniz.

Sınıflar arası haberleşmelerde ReadOnlyDictionary veya Collection tiplerini kullanmayı unutmayın ki değişime kapalı olsun. Tek yönlü değişimden bahsediyorum.

Neden iki proje açtık ? Data projesi xml verilerinden veri okuyor Core ise işlem yapan kütüphanemiz. Bugün bu kararı verdik ve Xml verileri üzerinden çalışıyoruz. Yarın kararınız değiştiğinde programınızı değiştirmeden bu sınıflara metodlar ekleyerek veya değiştirerek ana programınız fazla etkilenmeden (aldığınız kararlara göre değişiklik boyutu farklılık gösterebilir) işlemlerinizi yenileyebilirsniz.

Geriye kalan soru ise şu : E bu xml dosyasını herkes görürse ne anlamı kalır ? Evet onu da bir şifreleme programı ile şifreleyebilirsiniz ve kullanıma kapalı olur. Ancak burada kullanıcı bilgisayarı sadece lokal olarak çalışacak derseniz bu yöntem kötü fikir değil. Örnek olarak "Kleopatra" adlı programla bu Xml dosyasını şifreleyebilirsniz ve açılamaz duruma gelir. Anahtar dosya sizde kalır ve istediğiniz zaman anahtar karşı dosyanızla açar ardından değişiklikleri yapıp tekrar kilitlersiniz.

2- Programa ait kullanıcı yetkilendirme işlemlerinin bir veri tabanından alınması :

Çok basit. Bir veri tabanınız varsa o veri tabanına bir tablo ve üstteki Xml dosyasını tablonuza uyarlayarak bu mantığı veri tabanına senkronize etmiş olursunuz. Veriler veri tabanında md5, sha1 veya farklı bir sistem ile ve + kendi ufak bir şifreleme eklentiniz ile saklayabilirsiniz.

3- Programa ait kullanıcı yetkilendirme işlemlerinin bir veri tabanıda tutularak dinamik haberleşme sağlanması :

İki numaradaki tablo sistemini oluşturursunuz. Server'da bir WCF karşılık gelen program ile haberleşerek bilgileri programınıza dinamik çekersiniz. Bu yöntem genellikle uzaktan haberleşmeler için kullanılıyor. Eğer sisteminiz bir domain üzerine ve farklı lokasyonlarda iseniz detayları konuşulur.


Her durumda Xml dosyasını veya veri tabanınızdaki bilgileri değiştirebilirsiniz. Bu demek oluyor ki yetkilendirmeyi dinamikleştirebilirsiniz. Çok detay var bunların hepsini yazmak yerine itiyaçlarınıza karşılık gereli bulup ve üzerine tekrar konuşalım. Sadece fikir olarak verdiğim bilgileri kullanmak zorunda değilsiniz, farklı bir düşünceniz var ise üzerine konuşabiliriz.

Saygılarımla
 
Son düzenleme:

Samet UCA

Müdavim
Katılım
3 Ağustos 2012
Mesajlar
3,277
Reaksiyon puanı
2,912
Puanları
113
Yukarıdaki bilgilerin üzerinden giderseniz çok daha güvenli bir uygulama yazmanız mümkün.
--
Eğer okul için bir proje ise aşağıdaki yöntemi deneyebilirsiniz. Ancak profesyonel bir projede bu kesinlikle güvenli olmaz.
Ben lisedeyken çok daha farklı işlevi olan ancak bahsettiğiniz fonksiyonu kullanması gereken bir uygulama geliştirmiştim.
Veritabanımda tablo düzenlemesi şu şekildeydi,

8NVNOV.png


Bu tablodan anlamanız gereken şu;
Yetki kısmı eğer 1 e karşılık geliyorsa kullanıcı normal, yetki kısmı 2 değerine karşılık geliyorsa kullanıcı yetkilidir.
Bu durumda siz uygulamanızda muhtemelen if ile kullanıcıadı ve şifresini kontrol ettiriyorsunuzdur. Bu kontrole YETKİ kısmınında kontrol edilmesini eklemeniz gerekmekte. Bu kontrol durumda şöyle bir blok kullanabilirsiniz.
Kod:
try
{
int yetki = "veritabanındangelenyetkideğeriburaya";
if(yetki==1)
{
// Buttonları labelleri gizle
}
if(yetki==2)
{
// Bu kişi yetkilidir. Gerekli buttonları labelleri göster
}
else
{
// Yetkilendirmede bir problem var.
}
}
catch
{
// Bağlantı kurulamadı.
}
 

ekremyigiter

Öğrenci
Katılım
15 Kasım 2017
Mesajlar
15
Reaksiyon puanı
0
Puanları
1
Yaş
35
cevabınız için teşekkür ederim. halletim ben.

c# ta datagridview de "ödeme" adında bir kolon var. ve bu kolonda sadece iki kelime yazılır "ödendi" ve "ödenmedi".
sadece "ödendi" satır sayılarını label yada textbox a yazdırmak istiyorum.
 

Samet UCA

Müdavim
Katılım
3 Ağustos 2012
Mesajlar
3,277
Reaksiyon puanı
2,912
Puanları
113
cevabınız için teşekkür ederim. halletim ben.

c# ta datagridview de "ödeme" adında bir kolon var. ve bu kolonda sadece iki kelime yazılır "ödendi" ve "ödenmedi".
sadece "ödendi" satır sayılarını label yada textbox a yazdırmak istiyorum.
Anlamadım siz datagriedview de bulunan değeri textboxamı aktarmak istiyorsunuz?
Kod:
string deger = dataGridView1.SelectedRows[0].Cells[0].Value + string.Empty;
textbox1.Text = deger;
SelectedRows[0] = seçilen İlk sütunun .Cells[0] ilk hücresi anlamındadır.
Bu kodları DataGriedViewe ın Events kısmındaki SelectedRows eventına eklerseniz seçim esnasında otomatik olarak seçilen hücredeki değeri atar.
 

Samet UCA

Müdavim
Katılım
3 Ağustos 2012
Mesajlar
3,277
Reaksiyon puanı
2,912
Puanları
113
Bu konu ile ilgili fazlasıyla özel mesaj aldığımdan dolayı ek bilgilendirme yapmak istiyorum.
Yukarıda bahsettiğim tablo yapısını veritabanınızda oluşturduktan sonra gerekli metodları zamanında geliştirdiğim şu kodları kullanarak tamamlayabilirsiniz.

Uygulamanın Ado.Net ile geliştirilmiş hali


Uygulamanın LINQ TO SQL ile geliştirilmiş hali

 

ozmen_celik

Software Developer
Katılım
3 Mart 2012
Mesajlar
571
Reaksiyon puanı
318
Puanları
63
Yaş
39
işin mantığını aktarayım .

1- Yetki tablosu oluştur
2- Kullanıcı yada personel tablosu oluştur.
3- Oluşturmuş olduğun kullanıcı yada personel tablosuna yetkiID ekle ( int değer tanımlaman hata yaşamamanı sağlar
4- Girişte kullanıcı Rolü yani yetkisi == yetkiID gibi istediğin yetkiye sahipse şu menüler veya tablar vs görünsün yada görünmesin diye kodlarsın.

Not: Geniş kapsamlı bir muhasebe programı yazmıştım ve bu dediğin yetkilendirmeyi bende yapmıştım hatta halende yazdığım scriptlerde eğer yetki gerekiyorsa bu mantıkla gidiyorum
 
Üst