• 10-06-2014, 10:07:06
    #1
    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.
  • 10-06-2014, 11:34:09
    #2
    Ben 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:31
    #3
    Justian0 adlı üyeden alıntı: mesajı görüntüle
    Ben 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ığı
    Zaten 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.

    --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:05
    #4
    Sql'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:40
    #5
    kingofseo adlı üyeden alıntı: mesajı görüntüle
    Sql'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;
    }
    Yaptığı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 00000

    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:06:34
    #6
    gelişmiş her dilde olduğu gibi php de de acl ve rbac sistemleri var bir google yapıver belki bakarsın işine yarar
  • 10-06-2014, 16:31:45
    #7
    Haymac adlı üyeden alıntı: mesajı görüntüle
    gelişmiş her dilde olduğu gibi php de de acl ve rbac sistemleri var bir google yapıver belki bakarsın işine yarar
    http://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ı.
  • 10-06-2014, 21:01:47
    #8
    ylv
    Üyeliği durduruldu
    loc adlı üyeden alıntı: mesajı görüntüle
    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.
    merhaba,

    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