lostyazilim
tr.link

Üye Tipine göre Yönetim panelinde işlem kısıtlama

12 Mesajlar 2.554 Okunma
acebozum
tr.link

ismail03 ismail03 WM Aracı Kullanıcı
  • Üyelik 28.11.2013
  • Yaş/Cinsiyet 30 / E
  • Meslek Ameliyathane Hemşiresi
  • Konum Afyon
  • Ad Soyad I** Ç**
  • Mesajlar 2633
  • Beğeniler 344 / 487
  • Ticaret 12, (%100)

hostwin adlı üyeden alıntı

Aşağıda yazdığım yetkilendirme kodlarıyla bir oyun sitesine admin panel yapmıştım. 10 seviyeliydi
örnek 5 seviyeli bir kod yazdım aşağıda çözmeye çalışın.

tablo sayfalar
kolon sayfa adı - kolon 1 2 3 4 5 (5 kolon oluştur ve her kolona aşağıdaki gibi sayfa yetkilerini seviyelendir)
yönetici sayfası -
1. kolon 11000 ( üye seviyesi 1 ve 2 olanlar yetkili )
2. kolon 10100 (üyelevel seviyesi 1 ve 3 olanlar bu sayfayı görebilir)
3. kolon 10000 ( üye level sadece 1 olanlar görebilir )
4.kolon 10010 (4. seviye ve 1. seviye adminler görebilir)
5. kolon 00000 (herkese kapalı)
( 5 çeşit admin yada moderator erişim yetkisi )

tablo üyeler
kolon uyeLevel 0 - 1- 2- 3- 4- 5 ( 5 çeşit yetki var 0 olan üyeler 1 ile 5 arası yönetici hesapları)


örnek 11000 0 olanlar üye 1 olanlar admin 5 basamaklı ilk 2 basamak ( üyeler tablosunda leveli 1 ve 2) olan kişiler bu sayfayı görebilir.

tablo üyeler uyelevel=(bu kolonda üyenin seviyesini belirt 0 ise üye 1 ise admin 5e kadar tanımla )


foreach($db->query("select * from where uyeid='$id'")as $row){

$uyelevel=$row[uyeLevel];

foreach($db->query("select * from sayfalar")as $row){
if($row[pageAccess][0]){$accesslevel[$uyeLevel];}
if ( $row[pageAccess][$uyeLevel-1] == "1" ) {

sayfalardaki 1. kolonda ilk sıradaki 1 ile üye level 1 ise bu kısmı görebilir. ikinci sıradaki 1 ile üye seviyesi 2 olan kişide görebilir. üçüncü sıradaki 0 olduğu için 3 nolu admin göremez. Biraz karışık gibi görünüyor olabilir. vaktim az tam anlatım yapamadım. mantığı anlatabildiysem işini çok kolaylaştırır.

echo "sayfayı yada konuyu görüyorsun";
}else{
echo "sayfayı yada konuyu görmüyorsun";}

örnek istersen http://oyunpist.com/admnp0/

kolay gelsin

Hocam json daha iyi değil mi?
 

 

elektronikssl
webimgo

SancarSaran SancarSaran WM Aracı Kullanıcı
  • Üyelik 14.01.2018
  • Yaş/Cinsiyet 52 / E
  • Meslek Programcı
  • Konum İzmir
  • Ad Soyad S** S**
  • Mesajlar 319
  • Beğeniler 4 / 111
  • Ticaret 0, (%0)
Bu işin çok çeşitli yolları var.

En basiti. Erişim seviyesidir.

kullanıcı tablonda erişim seviyesi diye bir int oluştur.

Adminler 2
Yarım adminler 4
Çeyrek adminler 8
Soğan cücükleri 16

böyle katlanarak gider. aralarda boşluk bilerek var yarın ikisi arasında bir şey çıkarsa diye.

Niye 0 1 kullanmıyouz ? true false karışmasın diye.

sessionda erisimSeviyesi diye tutarsın

switch($_SESSION['erisimSeviyesi']) {
case 1:
include("admin_menu.php");
break;
case 2:
include("yarim_admin_menu.php");
break;
}


Yetermi ? yetmez.

Yapılacak işlem minimum hangi yetkiyi istiyorsa ona göre erişim verirsin.
yani diyelim bir işi çeyrek admin seviyesi kurtarıyor


try {
if($_SESSION['erisimSeviyesi'] > 8) {
throw new exception("yetersiz erişim seviyesi");
}
// artık ne işin varsa buraya yazıyorsun
} catch(Exception $e) {
echo $e->getMessage();
return false;
}


Niye try catch kullanıyoruz, iflerin elselerin suyumu çıktı ?

Yok. bu bir yazılım modeli, biz buna def-i bela diyelim.
Önce gereklilikleri kontrol ediyorsun ki kodun daha sade görünsün.

Bu model dikkatli tasarlanırsa, bayaa su kaldırır. kullanımı basittir. kullanıcıların yetki seviyesi kolayca değiştirilebilir.

Sorunu bir işin birden fazla yetki seviyesinde yapılması istendiğinda zaman zaman kodun duplikasyonu gerekebiliyor. Ancak buda düzgün class yapısı kurularak kolayca aşılır.

JSON bir data saklama ve transfer formatıdır. php den mesela javascripte karmaşık veri kümeleri aktarırken iyidir. Senin durumunda kullanmak için bir neden göremiyor.

Eğer daha karmaşık yetkilendirme modelleri istersen bunları Laravel gibi frameworklerde bulabilirsin. Ancak bunların uygulaması zor ve çetrefillidir. Gerekmiyorsa kullanma.
 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al