Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Modüler kullanıcı haklarını veritabanına kaydetme

Modüler bir tasarıma sahip PHP-MySQL uygulamam var... Şu ana kadar 5 modül tamamlandı, toplamın 10'u geçeceğini sanmam...

2 tip de kullanıcımız var: kullanıcı ve admin. Admin'ler kullanıcıları edit edebiliyorlar, kullanıcılar ise diğerlerini edit edemiyorlar...

Modüler bazda yetkilendirme yapmak istiyorum. Yani admin tüm modüllerde herşeyi yapabilecekken normal kullanıcılar sadece izin verilen modülleri değiştirebilecekler.

Sorum şu: bu yapıyı veritabanında nasıl tutmalıyım? users diye bir tablom halihazırda var zaten. Aklıma 3 çözüm geliyor ama tecrübe edilmiş tavisye edilen bir yapı varsa öğrenmek isterim sonuçta amerikayı baştan keşfetmeye gerek yok.

Bu arada tabii uygulamanın yeni versiyonları çıktıkça yetkileri de güncellemek gerekecek. Default olarak yeni kullanıcıların yetkileri de belirlenmiş olmalı, hem ynei kullanıcı eklendiğinde, hem de yeni modül eklendiğinde.

Şu ana kadar benim aklıma gelen çözümler:
* users tablosundaki bir alanda bit'lerle yetkileri tutmak. Mesela 10001 demek sadece "Modül A" ve "Modül E"ye yetkisi var demek...

* users tablosundaki bir alanda bir ayraçla ayırarak tutmak: "Modül A, Modül E" gibi

* Ayrı bir user_perms tablosu yaratmak. Ör:

UserId | Module | Permission 1 | A | 1 1 | B | 0


Sizce hangisi daha doğru bir yaklaşım olur?
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Cevaplar

  • msarchet adlı üyenin fotoğrafı
    13 yıl önce yazılmış
    1 cevap - 0 soru
    Benzer bir işlemi bir windows uygulamasında yapıyorum ben. En iyi çözüm ayrı tablo. Şöyle birşey:

    UserId | ModuleA | ModuleB| ... |ModuleN 1 | 1 | 0| ... | 0

    Bu biraz daha açık oluyor, eğer çok sık modül eklenmeyecekse tabii...
    • jim adlı üyenin fotoğrafı jim
      Modül Z gelene kadar herşey iyi de Z gelince tabloyu baştan tasarlamak gerekecek...
      13 yıl önce yazılmış
    • sherri adlı üyenin fotoğrafı sherri
      Bir an için benim de aklıma geldi bu çözüm ama ilerleyen zamanlarda içinde on milyon tane alanı olan bir tablo oluşmasını pek istemeyeceğime karar verdim.
      13 yıl önce yazılmış
  • armaganbice adlı üyenin fotoğrafı
    13 yıl önce yazılmış
    13 cevap - 0 soru
    Ayrı bir user_perms tablosu yaratmak daha doğru bir yaklaşım olur...
    Gelecekte farklı düşünceler için'de bu açılan dosya'ya gerekli alanlar açılarak
    kullanım'da daha geniş boyutlu olanak sağlanır...
  • cod3r adlı üyenin fotoğrafı
    13 yıl önce yazılmış
    5 cevap - 1 soru
    Benim kullandigim yapida moduler yetki degil grup ve altgrup bazli yetki veriyorum yani moduler yapida olan tekil yetki kavramini sinirsiz boyuta cikariyorum.

    su sekilde :

    modulTanim (Modul tanimlari tablosu)

    ID | Aciklama | modulKodu | tip
    1 | Sipariş | 1 | 1
    2 | Sipariş İşlem | 1.2 | 2
    3 | Ürün | 3 | 1
    4 | Ürün İşlem | 3.4 | 2

    bu bolumu istedigimiz sekilde cogaltabiliriz.

    mesela tip bir menu de olacak basliklar. Bu basliklarada yetki vererek gorunup gorunmemesini saglayabiliriz. Tip 2 ise sayfa icerisindeki yetkiler burda ise sayfaya giris yapildiginda yetkileri suzerek yapip yapmamasini saglayabiliriz.

    roller tablosu

    kul. grup kodu | modulKodu | Yetki (1-Gorme, 2-Silme, 3-duzeltme.....)
    A (Admin) | 1 | 1 => burda admin menudeki siparisler linkini gorur
    U (User) | 1 | 1 => burda user menudeki siparisler linkini gorur
    A (Admin) | 1.2 | 2.3 => burda admin siparisde siler ve duzeltir
    U (User) | 1.2 | 3 => burda user siparisde sadece duzeltir.

    burda da baglantili sorgu yaparak isini gorebilirsin.

    Aslinda gruplar icinde bir tablo olusturman mantikli. Onuda rollere baglarsan sinirsiz sayida islem yapabilecegin ve adminin yonetebilecegi bir sistem yazmis olursun.


    umarim anlatabilmisimdir isim oldugundan acele yazdim biraz..
  • eozden adlı üyenin fotoğrafı
    13 yıl önce yazılmış
    1 cevap - 1 soru
    user_id | permission
    şeklinde bir tabloda, izinleri bir dizi şeklinde array('ModuleA','ModuleB',..) şeklinde oluşturabilirsin ve yukarıdaki tabloda onu serialize bir biçimde tutarsın, kullanıcı giriş yaptığında bu bölümü unserialize ederek kullanabilirsin hatta bu diziyi cache leyip daha da performanslı çalıştırabilirsin.