• 04-10-2023, 21:59:49
    #1
    Merhaba, rapor sistemi üzerine bir proje geliştiriyorum. Projede yetki sistemide yaptım. Yetki sistemine göre sayfaları görüp görememe olayları vs. hallettim. Panelde hem admin hemde kullanıcılar girip işlemler yapabilecekler.

    Admin ve kullanıcılar aynı tablo içerisinde yer alıyorlar. Tablo içerisinde admin_authority altında 'admin' veya 'kullanici' şeklinde ayrımını yapıyorum. Aşağıdaki resimden görebilirsiniz.


    Takıldığım kısım şöyleki benim komisyonlar diye bir sayfam var bu sayfada komisyonlar listeleniyor. Panel admini, kullanıcı profilini oluştururken kullanıcıya komisyon ataması da yapıyor. Kullanıcıya hangi komisyon atanmış ise kullanıcı kendi bilgileriyle panele giriş yaptığında komisyonlar sayfasında sadece kendi komisyonunu görebilsin istiyorum. Bunu aslında kısmen başardım. Aşağıdaki kod ile kime hangi komisyon atanmış ise sadece o komisyon görünüyor.

    $komisyonsor=$db->prepare("SELECT * FROM komisyonlar as k inner join administrator as b on k.komisyon_id=b.komisyon_id WHERE b.admin_username=:username");
    $komisyonsor->execute(array(
        'username' => $_SESSION['admin_username']
    ));

    Ama panel admininin komisyon_id'si boş olduğu için hiç bir komisyonu göremiyor. Panel admini olduğu için bütün komisyonları görebiliyor olması gerekiyor. Bunu nasıl çözebilirim?
  • 04-10-2023, 22:07:42
    #2
    Veritabanı mimarisinde ve anlatımda biraz sorun var bence

    Ama mevcuttan devam edersen tahmini yorumumu söyleyecek olursam;
    Üstteki db de komisyon_id=0 ise WHERE komutu koyma eğer > 0 ise WHERE çalışsın
  • 04-10-2023, 22:09:24
    #3
    sorgudan önce
    $where = 'admin';
    if (_SESSION['admin_username'] != 'admin'){
    $where = $_SESSION['admin_username'];
    }
    
    
    $komisyonsor->execute(array(
        'username' => $where
    ));
    gibi...
  • 04-10-2023, 22:10:26
    #4
    komisyonlara authors ve admins adında iki kolon ekleyerek bu kolonjları mysql üzerinde json olarak tutabilirsiniz, bu kolonlara birden fazla değer atayarak bir komisyon raporuna birden fazla yetki ve birden fazla kullanıcı atayabilirsiniz, böylelikle kullanıcı tablonuzda sadece kullanıcılara ait veri tutmuş olursunuz
  • 04-10-2023, 22:16:03
    #5
    Selam @HasanAB; ,
    Öncelikle, evrensel bir dil olduğu için İngilizce kullanmanı tercih ederim. Hem kod tabanı hem de tablo yapısı açısından İngilizce kullanman global olmanı sağlar. Ayrıca, tablolarında foreign key'leri belirtmediğini görüyorum, bu yüzden ilişkilerini mutlaka foreign key'lerle tanımlamalısın. Ayrıca, roller için bir JSON sütunu eklersen, ileride projeyi daha da geliştirmek istediğinde birden fazla rol ekleyebilirsin. Açıkçası, sorununu tam olarak anlayamadım. Kod paylaşımı olarak birkaç satır üstten ve alttan biraz daha kod eklersen, sorunu daha iyi anlayabilirim.


    Not: Lütfen, kod veya projeye ilişkin daha fazla detay vermek istersen sevinirim, daha spesifik bir soru sormaktan çekinme. Yardımcı olmaktan memnuniyet duyarım.
    Discord: .bleagle
  • 04-10-2023, 22:42:20
    #6
    Level koymalisiniz, struct dogru degil bir sonraki adimda tikanacaksiniz. Global dil kullanin mumkunse. Nested type kullanabilirsin belki. Laravelin user bundle ni incelemeni oneririm
  • 04-10-2023, 22:46:46
    #7
    eraynac adlı üyeden alıntı: mesajı görüntüle
    Selam @HasanAB; ,
    Öncelikle, evrensel bir dil olduğu için İngilizce kullanmanı tercih ederim. Hem kod tabanı hem de tablo yapısı açısından İngilizce kullanman global olmanı sağlar. Ayrıca, tablolarında foreign key'leri belirtmediğini görüyorum, bu yüzden ilişkilerini mutlaka foreign key'lerle tanımlamalısın. Ayrıca, roller için bir JSON sütunu eklersen, ileride projeyi daha da geliştirmek istediğinde birden fazla rol ekleyebilirsin. Açıkçası, sorununu tam olarak anlayamadım. Kod paylaşımı olarak birkaç satır üstten ve alttan biraz daha kod eklersen, sorunu daha iyi anlayabilirim.


    Not: Lütfen, kod veya projeye ilişkin daha fazla detay vermek istersen sevinirim, daha spesifik bir soru sormaktan çekinme. Yardımcı olmaktan memnuniyet duyarım.
    Discord: .bleagle
    Tavsiyeleriniz için teşekkür ederim, dikkate alacağım.

    Anlatmak istediğim tam olarak şöyle, panele giriş yapabilsin diye kullanıcıya bir profil oluşturuyoruz. Ve bu profili oluştururken o kullanıcıya bir komisyon ataması yapıyoruz (komisyonlar adında başka bir tablo var o tablo ile ilişkilendirmiş oluyoruz).



    Kullanıcı kendisi için oluşturulan profil bilgileri ile panele giriş yaptığında hangi komisyon ataması yapıldıysa komisyonlar sayfasına girdiğinde sadece o komisyonu görsün istiyorum. Ve bunu aşağıdaki verdiğim sorgu ile gerçekleştirdim.



    $komisyonsor=$db->prepare("SELECT * FROM komisyonlar as k inner join administrator as b on k.komisyon_id=b.komisyon_id WHERE b.admin_username=:username");
    $komisyonsor->execute(array(
        'username' => $_SESSION['admin_username']
    ));
    Şöyle bir problem var ki 'admin' ile 'kullanıcı' aynı tablo içerisinde olduğu için sıkıntı oluşuyor. Oluşan problem şöyle ki admin için herhangi bir komisyon ataması bulunmuyor ve tabloda da gördüğünüz üzere adminin komisyon_id'si boş. Boş olunca komisyonlar sayfasında da herhangi bir komisyon listelenmiyor. Ama admin panelin en üst yetkilisi olduğu için hepsini görebiliyor olması gerekiyor.


    Olay biraz karışık umarım anlatabilmişimdir
  • 04-10-2023, 22:56:20
    #8
    Inner join yerine left join deneyip sonucu paylaşır mısınız ?
  • 04-10-2023, 23:01:42
    #9
    tematem adlı üyeden alıntı: mesajı görüntüle
    Inner join yerine left join deneyip sonucu paylaşır mısınız ?
    Değişen bir şey olmadı yine aynı