Gestion des droits (ACL)
Page obsolète. jAcl est terminé et son api est gelée depuis la beta2 jusqu'à 1.0 finale (sauf bug)
objectifs
- API la plus simple possible
- API de gestion des droits et API d'interrogation des droits séparées.
- Moyen de prendre en compte instantannément les modifs, même pour les utilisateurs connectés
concepts
Élements composant un droit
Il faut distinguer les différents éléments qui entre en jeu dans le système de droit
- un sujet
- une valeur de droit
- un groupe d'utilisateurs
- une ressource (facultatif)
Sujet
c'est un intitulé representant un type de ressource ou une fonctionnalité sur laquelle on veut aposer un droit. Avant d'acceder ou utiliser une fonctionnalité, on interrogera donc le système pour connaître le droit correspondant au sujet.
utilisateur
Chaque utilisateur appartient à un ou plusieurs groupe. Le droit sur un sujet est toujours associé à un ou plusieurs groupes d'utilisateurs. Il est possible d'affecter des droits à un seul utilisateur (ce qui se traduit concretement par l'existence d'un groupe 'privé' propre à chaque utilisateur, afin de faciliter les traitements)
droit
Les droits sont rassemblés en groupe de droits. (les types de droits que l'on pourrait affecter à l'administration d'un forum ne sont pas les mêmes que ceux que l'on pourrait affecter à la gestion du contenu par exemple).
Chaque groupe de droit comporte donc un ensemble de droit, representé par des valeures entieres, qui sont combinables ensemble dans un groupe (en pratique, les valeurs doivent être différenciée par des bits).
ressource
Dans la plupart des cas, l'association sujet + utilisateur + droit suffit. Mais parfois on veut pouvoir avoir une granularité plus fine.
Par exemple, dans un système CMS, on veut pouvoir donner le droit de modification à un utilisateur sur ses propres articles, mais pas sur ceux des autres. Il faut alors rajouter dans cette association l'identifiant de l'article.
Par exemple, on donnera les droits suivants
- "création" sur le sujet cms.article pour le groupe redacteurs
- "modification" sur la ressource "monarticle" pour l'utilisateur toto faisant parti du groupe redacteur
Implémentation
Les tables : voir les scripts sql dans le module acl.
Pour les classes : voir lib/jelix/acl/
Le plugin acl
le plugin sera chargé de plusieurs choses.
specifications obsoletes
- Charger en session un objet jAclUserRights correspondant au profil de l'utilisateur, si il n'existe pas déjà
- de verifier la validité des données de l'objet jAclUserRights en sessions. Pour cela il y aura en base un paramètre indiquant la dernière date de modification des droits (faites par l'intermédiaire du module profile), et de comparer avec une date du dernier chargement de l'objet jAclUserRights en session. Si cette dernière est antérieur, il y a effacement du cache des données de jAclUserRights
- de verifier les paramètres de plugins des actions, en faisant appel à l'objet jAclUserRights
- 'acl.right'=>array('ressource','value','domaine'); pour indiquer que l'action necessite au minimum le droit indiqué
- 'acl.subpathright'=>array('ressource','value_max','domaine'); pour indiquer que l'action necessite au minimum le droit indiqué dans le sous-arbre de la ressource.
Le module acl
gestion des groups
liste
ajout
modif
suppression
gestion des users
liste des users
liste des groupes d'un user
ajout d'un groupe à un user
enleve un groupe à un user
gestion des droits
liste des sujet/ressources d'un groupe
liste des sujet/ressources que l'on peut ajouter à un groupe donné
ajout une sujet/ressources à un groupe
enleve une sujet/ressources à un groupe
modifie le droit sur un sujet/ressources/groupe, recursif ou non
