API des ACL (Access Control List)

Un article de OviWiki.




Sommaire

Fonctions pour tester les droits

bab_isAccessValidByUser()

Tester les droits d'accès pour un utilisateur spécifique, cette fonction est dans le fichier addonapi.php toujours chargé

function bab_isAccessValidByUser($table, $idobject, $iduser)
  • $table :
    Nom de la table de droit
  • $idobject :
    Nombre entier, id de l'objet concerné par le droit a tester, par exemple l'id du thème d'article ou l'id du forum
  • $iduser :
    id de l'utilisateur

bab_isAccessValid()

Tester les doits d'accès pour l'utilisateur courant, cette fonction est dans le fichier addonapi.php toujours chargé

function bab_isAccessValid($table, $idobject)
  • $table :
    Nom de la table de droit
  • $idobject :
    Nombre entier, id de l'objet concerné par le droit a tester, par exemple l'id du thème d'article ou l'id du forum

bab_getUserIdObjects()

Retourne un tableau contenant la liste des id accessibles par l'utilisateur courant, cette fonction est dans le fichier addonapi.php toujours chargé

function bab_getUserIdObjects($table)
  • $table :
    Nom de la table de droit

Liste des utilisateurs ayant accès à un droit

Afin de récupérer l'ensemble des utilisateurs ayant le droit d'accès à un objet, utiliser la fonction :

aclGetAccessUsers($table, $id_object)

Pour cela, il faut inclure le fichier php des ACL et l'utiliser comme ceci :

include_once $GLOBALS['babInstallPath']."admin/acl.php";
$users = aclGetAccessUsers($table, $id_object);

La fonction retourne un tableau contenant les utilisateurs qui disposent du droit passé par les paramètres. Le format de retour est un tableau structuré comme ceci :

array(
    id_user => array(
        'name' => 'user name',
        'email' => 'user email or false'
    )
)


Cette fonction est principalement utilisée pour les notifications par mail.


bab_getGroupsAccess()

Retourne la liste des groupes d'Ovidentia qui ont accès à un objet, cette fonction est dans le fichier addonapi.php toujours chargé

function bab_getGroupsAccess($table, $idobject)
  • $table :
    Nom de la table de droit
  • $idobject :
    Nombre entier, id de l'objet concerné par le droit a tester, par exemple l'id du thème d'article ou l'id du forum

Fonction pour enregistrer les droits

Pour afficher un formulaire de droits ACL, il faut inclure un fichier php :

global $babInstallPath;
include_once $babInstallPath."admin/acl.php";

L'object macl (multiple access control list)

$macl = new macl('tg_value', 'idx_value', $id_object, 'returnvar', $bsetofgroups, $iddelegation);
$macl->addtable( 'bab_table_name',bab_translate("Who can manage this environement?"));
$macl->filter(0,0,1,1,1);
$macl->babecho();

l'object "macl" permet la création d'un formulaire acl pour un seul object $id_object. Les paramètres 'tg_value' et 'idx_value' seront enregistrés dans le formulaire comme valeur pour les champs cachés tg et idx. La variable $_POST['returnvar'] sera déclarée lors du retour du formulaire.

Le paramètre $besetofgroups (booléen) permet d'afficher les ensembles de groupes ou non. Par défaut, les ensembles de groupes sont affichés (true).

Le paramètre $iddelegation permet d'indiquer l'id de délégation à utiliser. Si la valeur est nulle, le système utilise l'id de la délégation courante.

la méthode addtable() permet d'ajouter une ou plusieurs tables de droits. La méthode doit être appelée une ou plusieurs fois. Le premier paramètre est le nom de la table, le deuxième paramètre est le libellé qui sera affiché sur le formulaire.

Voici un exemple de structure pour la table de droits :

CREATE TABLE `bdic_env_groups` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `id_object` int(11) UNSIGNED NOT NULL DEFAULT '0',
  `id_group` int(11) UNSIGNED NOT NULL DEFAULT '0',
  PRIMARY KEY  (`id`),
  KEY `id_object` (`id_object`),
  KEY `id_group` (`id_group`)
);

filter()

la méthode "filter" permet de désactiver certaines possibilités du formulaire de droit.

Ci-dessous, la liste des paramètres possibles. Tous les paramètres sont optionnels. la valeur 1 permet de désactiver l'élément souhaité et la valeur 0 pour ne rien faire.

  1. permet de désactiver la liste des groupes
  2. fonctionnalité dépréciée (sans effet)
  3. permet de désactiver le groupe "Utilisateurs d'Ovidentia"
  4. permet de désactiver le groupe "Utilisateurs enregistrés"
  5. permet de désactiver le groupe "Utilisateurs anonymes"
  6. permet de désactiver un ou plusieurs groupes spécifiés par leur ID (le paramètre est un tableau)

babecho()

la méthode "babecho()" permet d'afficher le formulaire.

getHtml()

la méthode "getHtml()" permet de récupérer le html du formulaire.

set_hidden_field()

la méthode "set_hidden_field($sName, $sValue)" permet de définir des champs cachés supplémentaires.

Enregistrement du formulaire de droit

Pour enregistrer le résultat du formulaire de droit, appeler la fonction : maclGroups()



Enregistrer des droits par API

aclAdd($sTable, $iIdGroup, $iIdObject)

cette fonction permet d'ajouter des droits pour un groupe sur l'objet désiré dans la table de droits désirée

aclDuplicateRights($srcTable, $srcIdObject, $trgTable, $trgIdObject)

cette fonction permet de copier les droits d'un objet vers un autre objet

aclCloneRights($srcTable, $srcIdObject, $trgTable, $trgIdObject)

cette fonction permet de cloner un droit d'un objet à partir des droits d'un autre objet, si des droits existent sur $trgIdObject, ils sont supprimés avant de copier les droits de l'objet source.

aclSetGroups_all($table, $id_object)

Pour donner accès à tous les utilisateurs d'ovidentia

aclSetGroups_registered($table, $id_object)

Pour donner accès aux utilisateurs enregistrés

aclSetGroups_unregistered($table, $id_object)

Pour donner accès aux utilisateurs anonymes

Gestion des tables de droits

Pour mettre à jour les tables de droits lors d'une suppression, il faut utiliser les fonctions suivantes :

aclDelete($table, $id_object)

Fonction à appeler lors de la suppression d'un objet


aclDeleteGroup($table, $id_group)

Fonction à appeler lors de la suppression d'un groupe



Image:information.png Voir aussi l'API des groupes