Section: Configurer jAcl2.db
« Les concepts de jAcl2.db | ^ jAcl2 : système de droits | Utiliser jAcl2 avec jAuth » |
− Table des matières
Avant de pouvoir utiliser l'API de jAcl2 dans vos modules et le driver db de jAcl2 (ou le driver "dbcache"), il faut d'abord initialiser la base de données, et mémoriser les différents éléments utilisés pour les droits.
Installation ¶
Le driver jAcl2.db (ou jAcl2.dbcache) ne fonctionne qu'avec une base de données. Il vous faut donc configurer une connexion de base de données, et créer les tables nécessaires.
Configuration de la connexion ¶
Pour cela, il vous faut vous reporter à la page sur jDb.
Cependant, si les tables jAcl2 ne sont pas dans la base indiquée par le profil
par défaut, il vous faut alors créer un profil de connexion avec le nom
jacl2_profile
, ou un alias. Un exemple de fichier dbprofils.ini.php
:
[jdb:default]
driver="mysqli"
database="jelix"
host= "localhost"
user= "jelix"
password= "jelix"
persistent= on
force_encoding=true
[jdb:jacl2_profile]
driver="mysqli"
database="droits"
host= "localhost"
user= "jelix"
password= "xilej"
persistent= on
force_encoding=true
Création des tables ¶
Pour cela, vous devez installer le module jacl2db. L'installateur de ce module créera pour vous les tables nécessaires en base de donnée.
php cmd.php installmodule jacl2db
Si vous voulez donner directement des droits à un utilisateur nommé "admin" :
php cmd.php installmodule -p defaultuser jacl2db
Configuration des droits ¶
La configuration se fait au moyen de commandes du script jelix en ligne de
commande. Il y a deux commandes pour configurer jAcl2.db : acl2group
et
acl2right
. Chacune prenant en argument un nom de "sous-commande" suivi de 0
à n arguments suivant la sous commande.
Dans la suite, on est dans l'hypothèse où votre application s'appelle myapp. Remplacez bien entendu ce nom par le nom adéquate.
Notez que le module jacl2db_admin vous permet de configurer et gérer les droits en quelques clics, vous évitant d'utiliser la ligne de commande. Il vous faudra cependant quand même créer les sujets en ligne de commande.
Création des sujets ¶
Dans le système de droits, vous devez déterminer des "sujets" représentant une valeur de droit.
Imaginons que l'on veuille créer des droits sur les articles d'un CMS, les différents droits seraient : read, list, create, delete, update. Autrement dit, on pourrait définir les sujets suivants :
- "cms.articles.read",
- "cms.articles.list",
- "cms.articles.create",
- "cms.articles.delete",
- "cms.articles.update",
Notez que le nom du sujet commence par un prefixe "cms.articles" précisant exactement de quoi il s'agit. Ne mettez pas "read" tout court par exemple, ça peut préter à confusion et n'est pas très explicite. Indiquez donc toujours dans l'id des mots permettant d'identifier "à propos de quoi". Votre code n'en sera que plus compréhensible.
On peut lister les sujets déjà existants :
$ php cmd.php acl2right subject_list
Au départ, vous devriez obtenir une liste vide :
----Liste des sujets
id label key
--------------------------------------------------------
Un sujet est représenté par une valeur de droit et une clé de locale qui indiquera son label (clé que vous devrez enregistrer dans un fichier de locale).
Créons nos sujets :
$ php cmd.php acl2right subject_create "cms.articles.create" "cms~acl2.articles.create"
$ php cmd.php acl2right subject_create "cms.articles.update" "cms~acl2.articles.update"
$ php cmd.php acl2right subject_create "cms.articles.delete" "cms~acl2.articles.delete"
$ php cmd.php acl2right subject_create "cms.articles.list" "cms~acl2.articles.list"
$ php cmd.php acl2right subject_create "cms.articles.read" "cms~acl2.articles.read"
Si vous n'utilisez pas de module qui permette de gérer les droits, alors la clé de locale n'est pas indispensable. Mettez alors la chaîne que vous voulez.
À l'exécution de la commande, vous obtenez :
----Création d'un sujet
OK
Quand une commande acl2 se passe bien, il y a toujours le message OK. On peut le vérifier en listant à nouveau les sujets :
$ php cmd.php acl2right subject_list
----Liste des sujets
id label key
--------------------------------------------------------
cms.articles.create cms~acl2.articles.create
cms.articles.delete cms~acl2.articles.delete
cms.articles.list cms~acl2.articles.list
cms.articles.read cms~acl2.articles.read
cms.articles.update cms~acl2.articles.update
Sachez que vous pouvez supprimer un sujet en faisant :
$ php cmd.php acl2right subject_delete <nom du sujet>
Création des groupes d'utilisateurs ¶
La déclaration d'un droit nécessite un couple sujet/groupe d'utilisateur. Nous devons donc créer un groupe d'utilisateurs. La gestion des groupes d'utilisateurs se fait au moyen de la commande acl2group.
Créons par exemple un groupe de rédacteurs en indiquant un identifiant alphanumerique et un libellé (pour affichage dans l'interface de gestion). Le libellé est facultatif.
$ php cmd.php acl2group create "redacteur" "Rédacteurs"
Nous allons en créer un deuxième, en indiquant avec l'option -defaultgroup
que l'on veut que ce soit un groupe par défaut, c'est à dire dans lequel sera
mis tout nouvel utilisateur.
$ php cmd.php acl2group -defaultgroup create "lecteurs" "Lecteurs"
On peut lister les groupes avec la sous-commande list :
$ php cmd.php acl2group list
----Liste des groupes d'utilisateurs
id label name default
--------------------------------------------------------
lecteurs Lecteurs yes
redacteurs Rédacteurs
On peut changer le statut "default" plus tard, avec la sous-commande setdefault, en indiquant l'identifiant du groupe :
$ php cmd.php acl2group setdefault lecteurs true
ou
$ php cmd.php acl2group setdefault lecteurs false
Il est aussi possible de changer le nom du groupe :
$ php cmd.php acl2group changename redacteurs "Super Rédacteurs"
Ou encore d'effacer un groupe d'utilisateur (n'efface pas les utilisateurs qui y sont rattachés) :
$ php cmd.php acl2group delete redacteurs
Gérer les utilisateurs dans les groupes ¶
Dans ces groupes, vous allez indiquer des utilisateurs. Pour ajouter un utilisateur, vous devez d'abord déclarer l'utilisateur dans le système jAcl2.
$ php cmd.php acl2group createuser laurent
Cela déclare l'utilisateur Laurent, et un groupe privé lui est crée.
Ensuite, vous pouvez l'ajouter à des groupes. Il faut utiliser la sous-commande "adduser" et l'identifiant du groupe.
$ php cmd.php acl2group adduser lecteurs laurent
Pour retirer un utilisateur :
$ php cmd.php acl2group removeuser lecteurs laurent
Enfin, pour avoir la liste des utilisateurs d'un groupe :
$ php cmd.php acl2group userslist lecteurs
Ou tout les utilisateurs de tout les groupes :
$ php cmd.php acl2group alluserslist
Création des droits ¶
Puisque nous avons maintenant tout ce qu'il faut pour définir des droits, définissons-en. On utilise la commande acl2right.
Déjà, pour les lecteurs, on va dire qu'ils peuvent lire et lister les articles. On va donc assigner les sujets "cms.articles.list" et "cms.articles.read" au groupe des lecteurs :
$ php cmd.php acl2right add lecteurs "cms.articles.list"
$ php cmd.php acl2right add lecteurs "cms.articles.read"
Vérifions la liste des droits définis au moyen de la sous-commande list :
$ php cmd.php acl2right list
----Liste des droits
group subject resource
---------------------------------------------------------------
- anonymous group
- group lecteurs
cms.articles.list
-
cms.articles.read
-
La valeur "-" en dessous des sujets specifie un droit sur aucune ressource.
Passons maintenant au groupe rédacteur. On va leur donner tous les droits sur le sujet cms.articles.
$ php cmd.php acl2right add redacteurs "cms.articles.list"
$ php cmd.php acl2right add redacteurs "cms.articles.read"
$ php cmd.php acl2right add redacteurs "cms.articles.create"
$ php cmd.php acl2right add redacteurs "cms.articles.delete"
$ php cmd.php acl2right add redacteurs "cms.articles.update"
On vérifie :
$ php cmd.php acl2right list
----Liste des droits
group subject value resource
---------------------------------------------------------------
- group lecteurs
cms.articles.list
-
cms.articles.read
-
- group redacteurs
cms.articles.create
-
cms.articles.delete
-
cms.articles.list
-
cms.articles.read
-
cms.articles.update
-
Imaginons qu'on veuille donner toutefois aux lecteurs le droit de modifier l'article "opinions", on crée alors un droit sur la ressource "opinions", en indiquant l'identifiant de cette ressource en dernier paramètre à la sous-commande add :
$ php cmd.php acl2right add lecteurs "cms.articles.update" "opinions"
On vérifie :
$ php cmd.php acl2right list
----Liste des droits
group subject value resource
---------------------------------------------------------------
- group lecteurs
cms.articles.list
-
cms.articles.read
-
cms.articles.update
-
opinions
- group redacteurs
cms.articles.create
-
cms.articles.delete
-
cms.articles.list
-
cms.articles.read
-
cms.articles.update
-
On peut aussi retirer un droit avec la sous-commande remove, en indiquant, comme pour la sous-commande create, le groupe d'utilisateur et le sujet (plus éventuellement la ressource si on a une ressource).
Exemple, on change d'avis à propos de l'article "opinions" :
$ php cmd.php acl2right remove lecteurs "cms.articles.update" "opinions"
Une fois tous les droits établis, l'application peut fonctionner selon vos règles, et les modules peuvent faire appel à l'API de jAcl2 pour agir en fonction des droits que vous avez configuré.
Pour changer les droits, vous pouvez aussi installer le module jacl2db_admin. Une interface vous permettra de gérer plus finement les droits.