XHTML.net

Technology talks by Loïc d’Anterroches

News, articles, PHP, scripts, XHTML/CSS, …

  1. Home
  2. PHP: Hypertext Preprocessor
  3. Pluf - Framework en PHP5

Système de permission pour chaque objet de manière individuelle

The 2008-01-29 at 12:50 by Loïc d'Anterroches filed under Pluf - Framework en PHP5.

Les anglophones nomment cela row level permissions, pour les autres, bon la traduction n’est pas évidente.

Bon, si vous utilisez Pluf, vous avez certainement découvert le système de permissions. Il est basé sur le principe des groupes et des permissions individuelles. En gros, vous pouvez :

  • associer une (ou plusieurs) permission directement à un utilisateur ;
  • associer une (ou plusieurs) permission à un groupe et associer le groupe à un utilisateur, l’utilisateur hérite des permissions du groupe.

C’est simple et efficace, vous pouvez facilement faire quelque chose du genre :

if ($user->hasPerm('Monde.detruire_monde')) {
    // appuyer sur le bouton rouge
}

Mais maintenant supposons que nous ayons plusieurs mondes, on fait comment pour donner des droits sur un monde et pas sur un autre ?

$user = new Pluf_User(1); // utilisateur un
$monde = new Monde(3); // on prend le monde 3
Pluf_RowPermission:add($user, $monde, 'Monde.detruire_monde'); 

Maintenant, c’est sympa :

// $user n'a pas la permission sur tous les mondes
assert(false, $user->hasPerm('Monde.detruire_monde'));
// $user peut détruire le monde 3
$monde = new Monde(3);
assert(true, $user->hasPerm('Monde.detruire_monde', $monde));
// mais pas le monde 2
$monde2 = new Monde(2);
assert(false, $user->hasPerm('Monde.detruire_monde', $monde2));

Toujours aussi simple, souple et efficace ! Comme ce n’est pas une fonctionnalité intéressante pour tous et que cela nécessite 1 requête SQL supplémentaire quand on va chercher les permissions de l’utilisateur, il faut l’activer dans le fichier de configuration avec la clef ‘pluf_use_rowpermission’ mise à true.

$cfg['pluf_use_rowpermission'] = true;

Et pour ceux qui se posent la question, oui c’est pour permettre de donner des droits à un auteur sur un site particulier et pas un autre dans Plume 2.

Comments from readers

Voice your ideas

It is painless and I try not to kill electrons in the process.


Your email is required but will not be shared nor displayed.


Do you think your comment will force me to write even better stuff next time? If so, you simply rock.


Logo of Plume CMS