API des ACL (Access Control List)

De OviWiki
Révision de 7 janvier 2008 à 08:52 par Nouaya (discussion | contributions) (Enregistrer des droits par API)

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 fomulaire 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 null, 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 possible. 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 dupliquer un droit entre 2 objects

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

cette fonction permet de cloner un droit à partir 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

bab_isAccessValid($table_name, $id_object);

la fonction renvoie true ou false si l'utilisateur a accès à l'objet testé

bab_getUserIdObject($table_name);

la fonction renvoie la liste des objets auquel l'utilisateur à accès sur cette table de droit sous forme d'un tableau



Liste des utilisateurs ayant accès à un droit

Il faut inclure le fichier php des ACL :

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

La fonction aclGetAccessUsers 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 des 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