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

Download in other formats: Plain Text