Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Kayıt erişim yetkisi data şeması

Konu, 'SQL' kısmında omer tarafından paylaşıldı.

  1. omer

    omer Daimi Üye

    Kayıt:
    25 Haziran 2003
    Mesajlar:
    853
    Beğenilen Mesajlar:
    8
    Arkadaşlar merhaba,
    Ben kendi tablolarıma FIRMA, SIPARIS, URUN vb. ERISIM diye bir alan açmak istiyorum amacım program kullanıcılarının select çektiğinde kayıda erişimini kısıtlamak.
    Şöyle bir şey düşündüm.
    * FIRMA tablosunda ERISIM diye bir kolon açayım kolon türü varchar(250) olarak.
    * FIRMA tablosunda ERISIM alanına 1,2,5,6 diye UYE tablomun ıd'lerini yazayım.
    * UYE ID'si girişde session'a atayım örnek "5" üye kayıdı listelemek istedi. SELECT cümleme WHERE ekleyelim.
    Ama sorum şu hızlı çalışan nasıl bir where cümlesi yapmam lazım?
    SELECT * FROM FIRMA WHERE CHARINDEX(',5,',','+ERISIM+',')>0
    Amacım aşağıdaki gibi bir form yapıp data şeklini yukarıdaki gibi yapmak.

    Video 01:05 'de.
     
  2. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    897
    Beğenilen Mesajlar:
    236
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Yukardaki mantık hatalı çalışır. üye id si 2 var 21,22,23 var 221,222,223 var charindekste 2 arattığında hepsinide bulur.

    Doğru olan üyelere yetki kodu vererek üyeleri yetkilerine göre gruplandırmak.

    Her üye kaydına bir yetki kodu atamalısın. Mesela standard yetki kodu 1 olur. Daha yetkililer 2, olur 3 olur böyle gider.
    yetki farklılıklarının dördü beşi geçtiğini standart uygulamalarda görmedim.

    Üyeleri yetkilerine göre gruplandırmış oldun.
    Tablolardada hangi grup hangi kayıtlara erişebileceklerse ERISIM alanına o grubun yetki kodunu koyarsın. ID koyunca hatalı çalışır.

    Ama istisnai bir durum varsa kişisel bazda her kayda çok fazla farklı kişi erişmesi gerekiyorsa o zaman biraz daha karmaşık bir çözüm gerektirir.
    Mesela tablodaki 100 kaydın her birine farklı kişilerin erişmesi gerekiyor gibi çok farklı bir durum varsa, 3 numaralı kayda 8 farklı kişi erişebilir, 25 numaralı kayda 12 farklı kişi erişebilir gibi çok istisnai bir durum varsa daha karmaşık çözüm gerekir tabi.

    Ama üstte bahsettiğim gibi üyeleri üç beş yetki grubuna ayırman yetiyorsa, standart çözüm yeterli.

    Üyeleri gruplandırırken Her bir kayda ancak bir grup erişebilir mantığı ile gruplandırırsan, SELECT sorgunda charindeks veya LIKE kullanman gerekmez eşittir ile sorgu en hızlı şekilde çalışır.
    Ama bir kayda birden fazla grubun erişmesi şartsa o zaman LIKE veya CHARINDEX işini görür çünki grup sayısı 9 u geçmez. ID gibi 1 ve 10 karışmaz. 9 grubu aşarsa rakam yerine yetki kodu olarak a,b,c,d gibi kullanman gerekir...

    Tabi bu mantığı standart çözüm olarak söyledim... istisnai bir durumsa üzerinde düşünülüp sağlıklı bir çözüm üretilebilir. kayıt sayısı önemli, grup sayısı önemli... belki birden fazla yetki alanı kullanmak gerekir vs... kayıt sayısı çok fazla olacaksa chraindeks ve like gibi string manipulation komutları kullanmamaya çalışmak gerekir vs...
     
    Son düzenleme: 23 Eylül 2017