Framework

Classe Groups : stockage des permissions dans la base de données

Table des matières
Un problème se pose lorsque l'on veut conserver les permissions associées à chaque groupe pour différentes actions. Ces autorisations se présentent sous forme de tableau, ce qui n'est pas simple à entrer dans une base de données. La meilleure solution est de stocker le tableau sous forme sérialisée en utilisant la fonction serialize() de PHP.

Enregistrement dans la base de données



Une fois le tableau généré par la méthode return_array_auth() il faut échapper les apostrophes et les guillemets à l'intérieur de la requête SQL.
Voici un exemple pour mieux comprendre (mise à jour de l'autorisation d'un article dans le wiki) :
Code PHP :
<?php
//Génération du tableau des droits.
$array_auth_all = $groups->return_array_auth($auth_restore_archive, $auth_delete_archive, $auth_edit, $auth_delete, $auth_rename, $auth_redirect, $auth_move, $auth_status, $auth_com);
$sql->query_inject("UPDATE ".PREFIX."wiki_articles SET auth = '" . addslashes(serialize($array_auth_all)) . "' WHERE id= "' . $id_auth . "'", __LINE__, __FILE__);
?>


Récupération du tableau sérialisé dans la base de données et utilisation



Il suffit de récupérer la valeur inscrite dans la base de données et de la convertir en tableau (ne pas oublier de mettre un tableau vide au cas où les règles d'autorisation ne sont pas définies). On peut ensuite librement utiliser la méthode check_auth() pour contrôler les autorisations.

Code PHP :
<?php
$article_infos = $sql->query("SELECT auth FROM ".PREFIX."wiki_articles WHERE id = '" . $id_article . "'", __LINE__, __FILE__);
$article_auth = !empty($article_infos['auth']) ? unserialize($article_infos['auth']) : array();
if( $groups->check_auth($_WIKI_CONFIG['auth'], WIKI_STATUS)) )
echo 'Vous êtes autorisé à faire cette action';
?>
Cette page a été vue 2033 fois