API des ACL (Access Control List)

De OviWiki
Révision de 8 janvier 2008 à 15:01 par Patricia (discussion | contributions) (Fonction pour enregistrer les droits)

Aller à : navigation, rechercher

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`)
);

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)


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

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

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

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

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

Fonctions pour tester les droits

Pour vérifier si l'utilisateur connecté a le droit d'accéder ou non à un objet, utiliser la fonction suivante:

bab_isAccessValid($table_name, $id_object);

Cette fonction renvoie true ou false selon que l'utilisateur a accès ou non à l'objet testé.

La fonction suivante renvoie la liste des objets auquel l'utilisateur à accès sur une table de droit:

bab_getUserIdObject($table_name);

Elle renvoie la liste des objets sous forme d'un tableau.

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.

Gestion des tables de droits

Pour mettre a 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