PHP izinleri Uygulanması

9 Cevap php

Ben hayır şans ile bu birkaç kez yapmaya çalıştım. this post okuduktan sonra, tekrar bu yaparken ilgimi yaptı. Aşağıdaki çalışmıyor yüzden kimse bana söyleyebilir?

<?php

    $guest = 1;
    $editor = 2;
    $admin = 4;

    $user = $editor;

    if( $user == ($editor | $admin) ) {
    	echo "Test";	
    }

?>

9 Cevap

, Bit set bit kontrol etmek için AND operatörü (&) kullanmak | () bitsel OR operatörünü kullanın. Kodunuzu aşağıdaki gibi görünmelidir:

<?php

    $guest = 1;
    $editor = 2;
    $admin = 4;

    $user = $editor;

    if( $user & ($editor | $admin) ) {
        echo "Test";    
    }

?>

Ikili anlamıyorum ve bitsel operatörler yapmak tam olarak ne varsa, onu öğrenmek gitmek gerekir. Sen çok iyi bu nasıl anlayacaksınız.

Tekerleği yeniden icat değil ilgi, neden Zend ACL ve Zend Auth gibi ACL / Doğrulama sistemleri bakmak değil? Her ikisi de bir bütün olarak Zend Framework bağımsız kullanılabilir. Bu diğer sistemler bunu nasıl en az bakmak için bir yarar böylece Erişim Kontrolü zor bir durumdur.

Ben PHP kullanılan bu yana uzun bir zaman oldu, ama ben bu işe olacağını varsayabiliriz olacaktır:

<?php

    $guest = 1;
    $editor = 2;
    $admin = 4;

    $user = $editor;

    if( ($user == $editor) || ($user == $admin) ) {
        echo "Test";    
    }

?>

Ben hata raporlamada bu kullandım ve oldukça iyi çalışıyor. Kullanıcı izinleri gibi çok iyi çalışması gerekir - Eğer veritabanı ya da veritabanındaki bir userlevel sütunda her kullanıcı izni için birkaç sütun olabilir. Bu seçenek için gidin.

(2 | 4) 6 değerlendirmek, ancak 2 == 6 yanlıştır.

@ Mk: (2 | 4) 6 değerlendirir.

Başar, bu bir CMS izinleri yapılacak en iyi yol gibi görünüyor. Evet? Hayır mı?

Belki de, ben gerçekten bu şekilde hiç yapmamıştım. Ben ne yaptım veritabanında tek bir sütunda tek bir sayı "evet ya da hayır" ayarları bir sürü saklamak için bitsel operatörleri kullanılır.

Ben veritabanında izinleri saklamak istiyorsanız izinleri için, bu şekilde iyi bir çalışma olurdu sanırım. Birisi bazı içerik göndermek istiyor, ve sadece yöneticiler ve editörler onu görmek istiyorsa, sadece sonucu saklamak zorunda

 ($editor | $admin)

veritabanına, daha sonra kontrol etmek, gibi bir şey yapmak

 if ($user & $database_row['permissions']) {
       // display content
 } else {
       // display permissions error
 }

Bence bu iyi ölçek değildir. Ben aslında büyük ölçekli bir proje üzerinde kullanarak denemedim, ama bir CMS bu kullanmak için karmaşık yol geliyor.

Her zaman neye ihtiyacınız bağlıdır. Zaten Zend Framework biliyorsanız, o zaman ben daha önce yapılmış ikinci Zend_Acl / _Auth öneri olur. Ama her çerçeve Propably benzer bir bileşenin ile geliyor unutmayın.

Akla gelen diğer bir şey LiveUser. Ben de onunla bir çok çalışmayı seviyorum.

Ben hemen hemen her şeyi yapabilir düşünüyorum ve yaklaşım çok basit görünüyor ise, o da (tüm bu aracılığıyla () 'ler ise) edeceksin doğru uygulama ortasında ACL-mantık bir sürü koyun beri sınırlı. Basit ve uzatılabilen tutmak için yapılacak büyük bir şey değil. ;)