Question

J'ai essayé de le faire plusieurs fois sans succès.Après avoir lu ce post, ça m'a donné envie de refaire ça.Alors quelqu'un peut-il me dire pourquoi ce qui suit ne fonctionne pas ?

<?php

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

$user = $editor;

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

?>
Était-ce utile?

La solution

Utilisez l'opérateur OU au niveau du bit (|) pour définir les bits, utilisez l'opérateur ET (&) pour vérifier les bits.Votre code devrait ressembler à ceci :

<?php

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

    $user = $editor;

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

?>

Si vous ne comprenez pas le binaire et ce que font exactement les opérateurs au niveau du bit, vous devriez l'apprendre.Vous comprendrez beaucoup mieux comment faire cela.

Autres conseils

Afin de ne pas réinventer la roue, pourquoi ne pas jeter un œil aux systèmes ACL/Authentification comme Zend ACL et Authentification Zend?Les deux peuvent être utilisés indépendamment du Zend Framework dans son ensemble.Le contrôle d'accès est une situation délicate, il est donc avantageux de regarder au moins comment les autres systèmes le font.

Cela fait longtemps que je n'ai pas utilisé PHP, mais je suppose que cela fonctionnera :

<?php

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

    $user = $editor;

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

?>

Je l'ai utilisé dans le rapport d'erreurs et cela fonctionne plutôt bien.En ce qui concerne les autorisations utilisateur, cela devrait très bien fonctionner - vous pouvez avoir plusieurs colonnes pour chaque autorisation utilisateur dans votre base de données ou une colonne de niveau utilisateur dans votre base de données.Optez pour cette option.

(2 | 4) est évalué à 6, mais 2 == 6 est faux.

@mk :(2 | 4) est évalué à 6.

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

$user = $editor;

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

Génial, cela semble être la meilleure façon de créer des autorisations dans un CMS.Oui?Non?

Peut-être que je ne l'ai jamais vraiment fait de cette façon.Ce que j'ai fait, c'est utiliser des opérateurs au niveau du bit pour stocker tout un tas de paramètres "oui ou non" dans un seul numéro dans une seule colonne de la base de données.

Je suppose que pour les autorisations, cette méthode fonctionnerait bien si vous souhaitez stocker les autorisations dans la base de données.Si quelqu'un souhaite publier du contenu et souhaite que seuls les administrateurs et les éditeurs le voient, il vous suffit de stocker le résultat de

 ($editor | $admin)

dans la base de données, puis pour le vérifier, faites quelque chose comme

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

À mon avis, cela ne s'adapte pas bien.Je n'ai pas réellement essayé de l'utiliser sur un projet à grande échelle, mais un CMS semble trop compliqué à utiliser.

Cela dépend toujours de ce dont vous avez besoin.Si vous connaissez déjà Zend Framework, j'appuierais la suggestion Zend_Acl/_Auth qui a été faite plus tôt.Mais gardez à l’esprit que chaque framework est probablement livré avec un composant similaire.

L'autre chose qui me vient à l'esprit est Utilisateur en direct.J’aime aussi beaucoup travailler avec.

Je pense que vous pouvez faire à peu près n'importe quoi et même si votre approche semble très simple, elle est également limitée puisque (à travers tous ces if()) vous allez mettre une grande partie de la logique ACL en plein milieu de votre application.Ce qui n’est pas la meilleure chose à faire pour que cela reste simple et extensible.;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top