Section: Configurer jAcl.db
« Les concepts de jAcl.db | ^ jAcl, ancien système de droits |
− Table des matières
Avant de pouvoir utiliser l'API de jAcl dans vos modules et le driver db de jAcl, il faut d'abord initialiser la base de données, et mémoriser les différents éléments utilisés pour les droits.
La configuration est facilitée grâce aux scripts en ligne de commande fournis.
Création de la base ¶
Le driver jAcl.db 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 jAcl ne sont pas dans la base indiquée par le profil par défaut, il vous faut alors créer un profil de connexion, et l'indiquer dans le parametre "jacl_profil". Un exemple de fichier dbprofils.ini.php :
default = foo
jacl_profil= acl
[foo]
driver="mysql"
database="jelix"
host= "localhost"
user= "jelix"
password= "jelix"
persistent= on
force_encoding=true
[acl]
driver="mysql"
database="droits"
host= "localhost"
user= "jelix"
password= "xilej"
persistent= on
force_encoding=true
Création des tables ¶
Vous trouverez dans le répertoire install/ du module jelix, des scripts sql pour créer les tables : install_jacl.schema.mysql.sql. Vous devriez avoir alors les tables :
- jacl_group
- jacl_user_group
- jacl_right_values_group
- jacl_right_values
- jacl_subject
- jacl_rights
Une fois ces tables créées, vous pouvez vous lancer dans la configuration de jAcl.
Préparation ¶
La configuration se fait au moyen de commandes du script jelix en ligne de commande. Ouvrez donc un terminal et placez vous dans le répertoire lib/jelix-scripts.
$ cd lib/jelix-scripts/ # sous linux
$ cd lib\jelix-scripts\ # sous windows
(note : $ represente l'invité de commande).
Mémorisez ensuite le nom de votre appli dans la variable d'environnement JELIX_APP_NAME :
$ export JELIX_APP_NAME="myapp" # sous linux
$ set JELIX_APP_NAME=myapp # sous windows
Dans la suite, il faut exécuter le script jelix.php. Rappelez vous que l'on fait comme ceci, en appelant php :
$ php jelix.php une_commande argument argument argument...
Sous linux, vous avez un script bash qui facilite un peu les choses :
$ ./jelix une_commande argument argument argument...
Il y a trois commandes pour configurer jAcl.db : aclvalue, aclgroup et aclright. Chacune prenant en argument un nom de "sous-commande" suivi de 0 à n arguments suivant la sous commande.
Création des valeurs ¶
Dans le système de droit, vous devez déterminer des "sujets". Chacun de ces sujets pouvant être associés à une ou plusieurs valeurs d'un ensemble de valeurs précises. Aussi, avant d'enregistrer les sujets, il faut créer ces groupes de valeurs.
Dans l'ordre, on crée un groupe de valeur, et on enregistre ensuite toutes les valeurs possibles dans ce groupe.
Imaginons que l'on veuille créer un sujet "cms.articles", avec les valeurs READ, LIST, CREATE, DELETE, UPDATE.
On peut d'abord lister les groupes de valeurs qui existent :
$ php jelix.php aclvalue group_list
Au départ, vous devriez obtenir une liste vide :
----Liste des groupes de valeurs de droits
id label key type
--------------------------------------------------------
Si il n'y a pas de groupe de valeurs existant correspondant à ce que vous voulez, il faut en créer un. Vous devez alors indiquer un identifiant numérique (qui n'est pas déjà pris par un autre groupe), une clé de locale qui indiquera son label (clé que vous devrez enregistrer dans un fichier de locale), ainsi que le type de groupe.
Si le sujet peut être associé à plusieurs valeurs du groupe (c'est notre cas dans l'exemple), le type est 0. Si il ne peut être associé qu'à une seule valeur d'un groupe (par exemple, un groupe contenant "true" et "false"), le type est 1.
Créons notre groupe :
$ php jelix.php aclvalue group_add 1 "cms~acl.articles.values" 0
L'identifiant 1 et le nom de locale sont à modifier en fonction bien sûr de l'existant. 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 :
----Ajout d'un groupe de valeurs de droits
OK
Quand une commande acl se passe bien, il y a toujours le message OK. On peut le vérifier en listant à nouveau les groupes :
$ php jelix.php aclvalue group_list
----Liste des groupes de valeurs de droits
id label key type
--------------------------------------------------------
1 cms~acl.articles.values 0 (combinable values)
Sachez que vous pouvez détruire un groupe de valeurs en faisant :
$ php jelix.php aclvalue group_delete 1
Maintenant il faut remplir le groupe avec des valeurs. On indique la valeur, une clé de locale pour le libellé de la valeur, et l'id du groupe dans laquelle on la met.
$ php jelix.php aclvalue add READ "cms~acl.articles.value.read" 1
$ php jelix.php aclvalue add LIST "cms~acl.articles.value.list" 1
$ php jelix.php aclvalue add CREATE "cms~acl.articles.value.create" 1
$ php jelix.php aclvalue add DELETE "cms~acl.articles.value.delete" 1
$ php jelix.php aclvalue add UPDATE "cms~acl.articles.value.update" 1
On peut vérifier que tout est bien crée grâce à la sous commande list :
$ php jelix.php aclvalue list
----Liste des valeurs de droit
value label key
-----------------------------------------
GROUP 1 (cms~acl.articles.values)
CREATE cms~acl.articles.value.create
DELETE cms~acl.articles.value.delete
LIST cms~acl.articles.value.list
READ cms~acl.articles.value.read
UPDATE cms~acl.articles.value.update
Vous pouvez bien sûr effacer une valeur avec la sous-commande delete, en indiquant la valeur et le numéro de groupe de valeur. Par exemple :
$ php jelix.php aclvalue delete LIST 1
Vous pouvez maintenant créer autant de groupe de valeurs que nécessaire, sachant qu'un groupe de valeur peut être bien sûr utilisé avec plusieurs sujets.
Tables concernées ¶
- jacl_right_values_group, pour les groupes de valeurs.
- jacl_right_values, pour les valeurs.
Création des sujets ¶
Maintenant que les valeurs sont créées, on va pouvoir créer les sujets. La gestion des sujets se fait au moyen de la commande aclright. Créons notre sujet "cms.articles", en indiquant une clé de locale pour le libellé de ce sujet (ou un libellé quelconque si vous n'utilisez pas de module de gestion de droits), ainsi que le groupe de valeur qui lui est assigné (ici 1).
$ php jelix.php aclright subject_create "cms.articles" "cms~acl.articles.subject" 1
vous pouvez ensuite vérifier la création de ce sujet :
$ php jelix.php aclright subject_list
----Liste des sujets
id label key
--------------------------------------------------------
cms.articles cms~acl.articles.subject
possible values: CREATE DELETE LIST READ UPDATE
Vous avez la possibilité de détruire un sujet en tapant :
$ php jelix.php aclright subject_delete "cms.articles"
Table concernée ¶
- jacl_subject
Création des groupes d'utilisateurs ¶
La déclaration d'un droit, nécessite un triplet valeur/sujet/groupe d'utilisateur. Nous devons donc créer un groupe d'utilisateur. La gestion des groupes d'utilisateurs se fait au moyen de la commande aclgroup.
Créons par exemple un groupe de rédacteurs.
$ php jelix.php aclgroup create "rédacteurs"
Le message OK s'affiche, avec l'identifiant du nouveau groupe (ici 1) :
----Création d'un nouveau groupe
OK. Group id is: 1
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 jelix.php aclgroup -defaultgroup create "lecteurs"
On peut lister les groupes avec la sous-commande list :
$ php jelix.php aclgroup list
----Liste des groupes d'utilisateurs
id label name default
--------------------------------------------------------
2 lecteurs yes
1 rédacteurs
On peut changer le statut "default" plus tard, avec la sous commande setdefault :
$ php jelix.php aclgroup setdefault 1 true
ou
$ php jelix.php aclgroup setdefault 1 false
Il est aussi possible de changer le nom du groupe :
$ php jelix.php aclgroup changename 1 "super rédacteurs"
Ou encore d'effacer un groupe d'utilisateur :
$ php jelix.php aclgroup delete 1
Tables concernées ¶
- jacl_group, pour les groupes d'utilisateurs.
- jacl_user_group, pour associer un utilisateur à un groupe.
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 aclright.
Déjà, pour les lecteurs, on va dire qu'ils peuvent lire et lister les articles. On va donc assigner les valeurs LIST et READ pour le sujet "cms.articles", sur le groupe des lecteurs dont l'identifiant est 2 :
$ php jelix.php aclright add 2 "cms.articles" LIST
$ php jelix.php aclright add 2 "cms.articles" READ
Vérifions la liste des droits définis au moyen de la sous commande list :
$ php jelix.php aclright list
----Liste des droits
group subject value resource
---------------------------------------------------------------
- group lecteurs (2)
cms.articles
LIST
READ
Passons maintenant au groupe rédacteur. On va leur donner tous les droits sur le sujet cms.articles.
$ php jelix.php aclright add 1 "cms.articles" LIST
$ php jelix.php aclright add 1 "cms.articles" READ
$ php jelix.php aclright add 1 "cms.articles" CREATE
$ php jelix.php aclright add 1 "cms.articles" DELETE
$ php jelix.php aclright add 1 "cms.articles" UPDATE
On vérifie :
$ php jelix.php aclright list
----Liste des droits
group subject value resource
---------------------------------------------------------------
- group lecteurs (2)
cms.articles
LIST
READ
- group rédacteurs (1)
cms.articles
CREATE
DELETE
LIST
READ
UPDATE
Imaginons qu'on veuille donner toutefois aux lecteurs le droit de modifier l'article "opinions", on créer alors un droit sur la ressource "opinions", en indiquant l'identifiant de cette ressource en dernier paramètre à la sous commande add :
$ php jelix.php aclright add 2 "cms.articles" UPDATE "opinions"
On vérifie :
$ php jelix.php aclright list
----Liste des droits
group subject value resource
---------------------------------------------------------------
- group lecteurs (2)
cms.articles
LIST
READ
UPDATE opinions
- group rédacteurs (1)
cms.articles
CREATE
DELETE
LIST
READ
UPDATE
On peut aussi retirer un droit avec la sous-commande remove, en indiquant, comme pour la sous-commande create, le groupe d'utilisateur, le sujet, et la valeur conçernés (plus éventuellement la resource si on a une ressource).
Exemple, on change d'avis à propos de l'article "opinions" (il y a vraiment trop de spam :-) ) :
$ php jelix.php aclright remove 2 "cms.articles" UPDATE "opinions"
Une fois tous les droits établis, l'application peut fonctionner selon vos rêgles, et les modules peuvent faire appels à l'API de jAcl pour agir en fonction des droits que vous avez configuré.
Table concernée ¶
- jacl_rights