Daha önceden böyle birşeye ihtiyacım olmadığı için şuanda mantık yürütmekte biraz zorlanıyorum ama fikir açısından bir noktaya kadar gelebildim.
Kullanıcı gruplarına belirli yetkiler vererek bulundukları kategoride yetkisi var mı yok mu kontrolü yapıp buna göre işlem yapmasını sağlıyorum.
R - Read
W - Write
D - Delete
U - Upload
DL - Download
M - Management
Şeklinde gruplarıma göre yetki başlıklarımı belirledim ve her birine bir rakam gelecek şekilde oluşturdum. Kullanıcı gruplarım:
1- Guest
2- Inactive
3- Member
4- Contributor
5- Moderator
6- Administrator
7- Banned
Bu kullanıcı gruplarını üstteki yetki başlıklarına göre numaralandırdığımda şöyle bir durum ortaya çıkıyor:
6111111,5111110,4112210,3110010,2100000,1100000,70 00000
Bu işlemi kategorilerimi oluştururken kullanıcı grubu başlığına göre hangi kategoride hangi yetkilerin olması gerektiğini belirterek kaydediyorum. Yani her kategorinin bir auth sütunu var bu sütun içinde her grubun yetkisine göre üstteki gibi numaralar bulunuyor. Kafama takılan kısım şu, bu yetki numaralarını parçalayıp tek tek sorgulayarak gerekli alanda ne yetkisi var kontrolünü yapabiliyorum ama bunu bir fonksiyon aracılığı ile tek seferde yapmak mümkün müdür? Örneğin userauth isimli bir fonksiyon olsa kullanıcı grubu id sine göre userauth($groupid, "w") dediğim anda o alana yazma yetkisi varsa yazabilsin istiyorum mesela. Bu noktada beyin iyice durdu. Birkaç örnek gösterebilirseniz veya fikir verebilirseniz sevinirim.
Gelişmiş kullanıcı yetkilendirme
7
●6.994
- 10-06-2014, 11:34:09Ben yetkilendirme yaparken en basit şekilde yapmıştım çünkü kurumsal bir site idi kasmamıştım hiç uyguladığım mantık şu örnek veriyorum gelen kişi yetkisi 1 ise bu işlemi yapabilir değilse yapamaz alanı gösterme ve işlem yapmaya çalışırsa yapmasın gibi if else mantığı
- 10-06-2014, 11:48:31Zaten ben de o yöntemi kullanıyordum normalde. Fakat kullanıcı gruplarında bazı bölümlere giriş izni verdiğin zaman bir gruba bölüm içinde upload izni verirken diğerinde sadece download izni veriyorsun. Forum kategorilerinde oluşturulan mantığı düşün.Justian0 adlı üyeden alıntı: mesajı görüntüle
--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 11:48:31 -->-> Daha önceki mesaj 11:39:23 --
function userauth ($auth, $usergroup, $accesstype){ //Access Type $G = "0"; // User Group $R = "1"; // Read $W = "2"; // Write $D = "3"; // Delete $U = "4"; // Upload $DL = "5"; // Download $M = "6"; // Management $useraccess = explode(',', $auth); for ($i=0; $i<=count($useraccess); $i++): if(@$useraccess[$i][$G]==$usergroup): if($type=="R"): $userauth = $useraccess[$i][$R]; endif; if($type=="W"): $userauth = $useraccess[$i][$W]; endif; if($type=="D"): $userauth = $useraccess[$i][$D]; endif; if($type=="U"): $userauth = $useraccess[$i][$U]; endif; if($type=="DL"): $userauth = $useraccess[$i][$DL]; endif; if($type=="M"): $userauth = $useraccess[$i][$M]; endif; if($type=="G"): $userauth = $useraccess[$i][$R]; endif; endif; endfor; return $userauth; }Şöyle bir fonksiyon yaptım ama ne kadar sağlıklı çalışır bilemiyorum.
// Şimdi kodlarımı test ettim. Sorunsuz bir şekilde çalışıyor. - 10-06-2014, 14:37:05Sql'de yetki sütünü olustur sonra istedigin gibi in_array'ile kontrol edebilirsin.
Bir örnek betigi hazirladim.
/* 1= Site ayarlari olsun 2= Uye Ekleme olsun */ $yetki_array=explode(",", $row["yetki"]); if(is_array($yetki_array) ){ if(in_array("1", $yetki_array) ): echo "Site ayarlari icin yetkiniz bulunuyor !"; else: echo "Site ayarlari icin yetkiniz yok !"; endif; if(in_array("2", $yetki_array) ): echo "Üye ekleme icin yetkiniz bulunuyor !"; else: echo "Üye ekleme icin yetkiniz yok !"; endif; } - 10-06-2014, 15:58:40Yaptığım işlemde zaten bunun gibi. Kategoriler için yetki sütunu oluşturup bu sütuna her kullanıcı grubu için yetkileri girdim. Her grubun 6 farklı yetkisi olacağı için bunları belirtmem gerekiyordu. Örneğin şuanda yaptığım 6111111,5111110,4112210,3110010,2100000,1100000,70 00000kingofseo adlı üyeden alıntı: mesajı görüntüle
Bu rakamlarda ilk rakam kullanıcı grubu diğerleri yetki ile alakalı. Hangi yetkinin hangi rakama geldiğini üstteki mesajda bulunan fonksiyonumda belirleyip sorunumu çözdüm. - 10-06-2014, 16:31:45http://phprbac.net/index.php bundan bahsediyorsunuz sanırım. İstediğimle birebir örtüşüyor ama şuan yaptığım da fazlasıyla işimi görüyor açıkçası.Haymac adlı üyeden alıntı: mesajı görüntüle
- 10-06-2014, 21:01:47Üyeliği durduruldumerhaba,loc adlı üyeden alıntı: mesajı görüntüle
http://www.php.net/manual/tr/languag...rs.bitwise.php
elimden geldiğince basit birşey yazıyım, yazım hataları olabilir siz kontrol edersiniz.
$yetkiler = array(
'R' => 1,
'W' => 2,
'D' => 4,
'U' => 8,
'DL' => 16,
'M' => 32
);
yetki sütunuma yetki numaralarının toplamını kayıt edeceğim.
ör
Read
Write
download
yetki verirsem 1+2+16 yani 19 (yetkiler sütunuma 6111111 yerine sadece 19 ekleyeceğim)
nasıl kontrol edeceğim?
function yetki_kontrol($istenilen_yetki, $kullanici_yetki) {
global $yetkiler ;
if ($istenilen_yetki & $yetkiler[$kullanici_yetki]) {
return true;
}
return false;
}
19 sayısı veritabanından kullanıcı yetki bilgisi olarak gelicek misal
yetki_kontrol('DL',19); //TRUE
yetki_kontrol('D',19); //FALSE
yetkilere yenisini eklerken
$yetkiler = array(
'R' => 1,
'W' => 2,
'D' => 4,
'U' => 8,
'DL' => 16,
'M' => 32,
'x' => 64
);
vericeğim sayıların 2^ olmasına dikkat edin.
iyi çalışmalar