Yetki Sistemi
Tek panel kullanarak giren kişinin yetkisini kontrol edip get değeri gönderiyorum fakat boş geldiğin de falan menüler gözükmüyor doğal olarak bu işlemi her dosya da tek tek kontrol mü ettirmem lazım veya her dosyadan get değeri mi göndermem lazım
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (3)
Merhaba,
Kendi izlemiş olduğum yolu anlatmak isterim. Gayet basit bir yol bana göre.
Öncelikle veri tabanında bir alan oluşturuyorsun. Örnek olarak;
user_authorization
id | data
-- | --
1 | sayfa_adi1, sayfa_adi2
Tarzında bir tablo oluşturduğumuzu farz edelim. Tabii bu kadar ile kalmayacak. User tablonun içerisinde de user_authorization_id diye bir alan koyup user_authorization tablosu ile ilişkilendirmelisin.
Sonrasında bir fonksiyon yazarak bunu bütün sayfalara koymalısın.
_Not: sayfa_adi1, sayfaadi2 alanları site.com/getPar kalın olarak işaretlenen alanı belirtmektedir.
<?php
function authorization($user_id, $url){
global $db;
$query -> $db->query("SELECT * FROM user INNER JOIN user_authorization ON user_authorization.id = user.user_authorization_id WHERE user.user_id = ?");
$query->execute([$user_id]);
$query = $query->fetch(PDO::FETCH_ASSOC);
$data = explode(", ", $query['data']);
if( in_array($url, $data) ){
return true;
}else {
die("Yetkisiz Erişim!");
}
}
Oluşturulan bu fonksiyonu tüm sayfalarında çağırdığın header.php veya senin sisteminde ne ise onun en başına(tabi öncesinde vt bağlantısı ve fonksiyonları çağırıp) koyup authorization($_SESSION['user_id'], $_GET['par']);
şeklinde çalıştıtırsan istediğine ulaşabileceğine inanıyorum.
Not: Kodları biraz da olsa baştan savma yazdım. Lütfen kullanmadan önce güvenlik kontrolünden geçir.
Ben yetkiyle ilgili şöyle bir yol izlemiştim. Her sayfa yada ilem için iki harften oluşan kod tanımlamıştım. Örnek olarak Makale sayfası yetkisi için MK yorumlar sayfası için YM gibi. Daha sonra kullanıcı tablosuna bu yetki kodlarını virgül ile ayırarak yazmıştım. Her sayfada yada işlemde yetki kodunun sessionda olup olmadığına göre işlem yapıyordum.