Domanda

Ho provato a farlo diverse volte senza fortuna.Dopo aver letto questo post, mi ha fatto interessare a farlo di nuovo.Quindi qualcuno può dirmi perché quanto segue non funziona?

<?php

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

$user = $editor;

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

?>
È stato utile?

Soluzione

Utilizzare l'operatore OR bit per bit (|) per impostare i bit, utilizzare l'operatore AND (&) per controllare i bit.Il tuo codice dovrebbe assomigliare a questo:

<?php

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

    $user = $editor;

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

?>

Se non capisci il binario e non capisci esattamente cosa fanno gli operatori bit a bit, dovresti impararlo.Capirai come farlo molto meglio.

Altri suggerimenti

Nell'interesse di non reinventare la ruota, perché non dare un'occhiata ai sistemi ACL/Autenticazione come Zend ACL E Zend Aut?Entrambi possono essere utilizzati indipendentemente dallo Zend Framework nel suo insieme.Il controllo degli accessi è una situazione complicata, quindi è utile almeno guardare come lo fanno gli altri sistemi.

È passato molto tempo dall'ultima volta che ho usato PHP, ma suppongo che funzionerà:

<?php

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

    $user = $editor;

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

?>

L'ho usato nella segnalazione degli errori e funziona abbastanza bene.Per quanto riguarda le autorizzazioni utente, dovrebbe funzionare molto bene: potresti avere diverse colonne per ciascuna autorizzazione utente nel tuo database o una colonna a livello utente nel tuo database.Scegli questa opzione.

(2 | 4) valuta 6, ma 2 == 6 è falso.

@mk:(2 | 4) vale 6.

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

$user = $editor;

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

Fantastico, questo sembra il modo migliore per ottenere le autorizzazioni in un CMS.SÌ?NO?

Forse non l'ho mai fatto davvero in quel modo.Quello che ho fatto è stato utilizzare operatori bit a bit per memorizzare un sacco di impostazioni "sì o no" in un singolo numero in una singola colonna nel database.

Immagino che per le autorizzazioni, in questo modo funzionerebbe bene se si desidera archiviare le autorizzazioni nel database.Se qualcuno vuole pubblicare del contenuto e vuole che lo vedano solo gli amministratori e gli editor, devi solo memorizzare il risultato di

 ($editor | $admin)

nel database, quindi per controllarlo, fai qualcosa di simile

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

Secondo me questo non si adatta bene.In realtà non ho provato a usarlo su un progetto su larga scala, ma un CMS sembra troppo complicato per usarlo.

Dipende sempre da cosa ti serve.Se conosci già Zend Framework, seguirei il suggerimento Zend_Acl/_Auth avanzato in precedenza.Ma tieni presente che ogni framework probabilmente ha un componente simile.

L'altra cosa che mi viene in mente è Utente live.Anche a me piace molto lavorarci.

Penso che tu possa fare praticamente qualsiasi cosa e sebbene il tuo approccio sembri molto semplice, è anche limitato poiché (attraverso tutti quegli if()) inserirai gran parte della logica ACL proprio nel mezzo della tua applicazione.Il che non è la cosa migliore da fare per mantenerlo semplice ed estensibile.;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top