/
configuration.gtw
374 lines (277 loc) · 10.3 KB
/
configuration.gtw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
~~LANG:EN@enman:rights2/configuration~~
Avant de pouvoir utiliser l'API de jAcl2 dans vos modules et le driver db de
jAcl2, 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 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 [[/bd|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 @@F@dbprofils.ini.php@@ :
<code ini>
[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
</code>
=== 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.
<code php>
php cmd.php installmodule jacl2db
</code>
Si vous voulez donner directement des droits à un utilisateur nommé "admin" :
<code php>
php cmd.php installmodule -p defaultuser jacl2db
</code>
===== 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 :
<code bash>
$ php cmd.php acl2right subject_list
</code>
Au départ, vous devriez obtenir une liste vide :
<code>
----Liste des sujets
id label key
--------------------------------------------------------
</code>
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 :
<code bash>
$ 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"
</code>
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 :
<code>
----Création d'un sujet
OK
</code>
Quand une commande acl2 se passe bien, il y a toujours le message OK. On peut le
vérifier en listant à nouveau les sujets :
<code bash>
$ 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
</code>
Sachez que vous pouvez supprimer un sujet en faisant :
<code bash>
$ php cmd.php acl2right subject_delete <nom du sujet>
</code>
==== 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.
<code bash>
$ php cmd.php acl2group create "redacteur" "Rédacteurs"
</code>
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.
<code bash>
$ php cmd.php acl2group -defaultgroup create "lecteurs" "Lecteurs"
</code>
On peut lister les groupes avec la sous-commande list :
<code bash>
$ php cmd.php acl2group list
----Liste des groupes d'utilisateurs
id label name default
--------------------------------------------------------
lecteurs Lecteurs yes
redacteurs Rédacteurs
</code>
On peut changer le statut "default" plus tard, avec la sous-commande setdefault,
en indiquant l'identifiant du groupe :
<code bash>
$ php cmd.php acl2group setdefault lecteurs true
ou
$ php cmd.php acl2group setdefault lecteurs false
</code>
Il est aussi possible de changer le nom du groupe :
<code bash>
$ php cmd.php acl2group changename redacteurs "Super Rédacteurs"
</code>
Ou encore d'effacer un groupe d'utilisateur (n'efface pas les utilisateurs qui y
sont rattachés) :
<code bash>
$ php cmd.php acl2group delete redacteurs
</code>
==== 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.
<code bash>
$ php cmd.php acl2group createuser laurent
</code>
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.
<code bash>
$ php cmd.php acl2group adduser lecteurs laurent
</code>
Pour retirer un utilisateur :
<code bash>
$ php cmd.php acl2group removeuser lecteurs laurent
</code>
Enfin, pour avoir la liste des utilisateurs d'un groupe :
<code bash>
$ php cmd.php acl2group userslist lecteurs
</code>
Ou tout les utilisateurs de tout les groupes :
<code bash>
$ php cmd.php acl2group alluserslist
</code>
==== 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 :
<code bash>
$ php cmd.php acl2right add lecteurs "cms.articles.list"
$ php cmd.php acl2right add lecteurs "cms.articles.read"
</code>
Vérifions la liste des droits définis au moyen de la sous-commande list :
<code bash>
$ php cmd.php acl2right list
----Liste des droits
group subject resource
---------------------------------------------------------------
- anonymous group
- group lecteurs
cms.articles.list
-
cms.articles.read
-
</code>
Depuis Jelix 1.4, la valeur "-" en dessous des sujets specifie un droit sur
aucune ressource. Auparavant c'etait la valeur vide (null) qui indiquait ce type
de droit.
Passons maintenant au groupe rédacteur. On va leur donner tous les droits sur le
sujet cms.articles.
<code bash>
$ 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"
</code>
On vérifie :
<code bash>
$ 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
-
</code>
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 :
<code bash>
$ php cmd.php acl2right add lecteurs "cms.articles.update" "opinions"
</code>
On vérifie :
<code bash>
$ 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
-
</code>
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" :
<code bash>
$ php cmd.php acl2right remove lecteurs "cms.articles.update" "opinions"
</code>
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.