Raccourcis : Contenu - rubriques - sous rubriques
EN FR

jAcl2 propose un système qui répond à la plupart des besoins en matière de gestion de droits. Il comporte divers éléments qui ensemble définissent des droits.

Éléments composant un droit

Il faut distinguer les différents éléments qui entrent en jeu dans le système de droits :

  • un nom de droit
  • un utilisateur
  • une ressource (facultatif)

Une combinaison de chacun de ces types d'éléments représente un droit appliqué.

Droits

Un droit est un libellé représentant une action que pourrait faire un utilisateur. Par exemple, cms.articles.create pourrait être le droit de rédaction d'un article d'un CMS.

Par convention, afin d'éviter les collisions entre différents modules, le nom du droit devrait commencer par le nom du module puis le nom du contrôleur et enfin la valeur de droit. Mais ce n'est pas une obligation.

Exemple :


cms.articles.read
cms.articles.create
cms.articles.update
cms.articles.delete

Jusqu'à Jelix 1.6, les noms des droits étaient nommés des 'sujets'. C'est pourquoi vous pouvez voir dans certaines API, dans les tables SQL ou la documentation, l'utilisation du terme 'sujet' (et dans Jelix 1.7.0 à 1.7.5, ils avaient été renommés de manière innaproprié 'rôles').

Utilisateur

Un droit s'exerce toujours sur un ou plusieurs utilisateurs. Mais cette notion est transparente du point de vue de l'API de la classe jAcl2. C'est le driver qui s'occupe de "reconnaître" l'utilisateur en cours (au moyen de jAuth en principe). Il se peut même que le driver repose sur un système où les utilisateurs sont dans des groupes auxquels les droits s'appliquent (comme c'est le cas de jAcl2.db). Mais vous n'avez pas à vous en préoccuper lors de l'utilisation de jAcl2.

Ressource

Dans la plupart des cas, l'association droit + utilisateur 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 valeurs de droits suivants

  • "cms.articles.create" pour le groupe "redacteurs"
  • "cms.articles.update" sur la ressource "monarticle" pour l'utilisateur Robert faisant partie du groupe "redacteurs".

Principes de fonctionnement

Le cœur de jAcl2 contient donc des relations entre deux ou trois types d'éléments.

La mémorisation d'une relation entre un droit, un utilisateur (plus éventuellement une ressource), définit un droit appliqué. Quand une relation n'existe pas entre un droit donné et un utilisateur donné, alors cela signifie qu'il n'y a pas de droit assigné à l'utilisateur.

Par exemple, si on définit juste ces droits suivants dans le système :

  • "cms.articles.read" pour l'utilisateur "laurent"
  • "cms.articles.create" pour l'utilisateur "laurent"
  • "cms.articles.update" pour l'utilisateur "laurent"

L'utilisateur laurent aura donc les droits de lecture, création et de modifications sur des articles du CMS, mais pas le droit d'effacer ("cms.articles.delete") puisque la relation n'existe pas.

Un module CMS qui repose sur ces droits devra, pour savoir ce que peut faire un utilisateur, interroger jAcl2, en lui demandant si par exemple l'utilisateur courant a le droit "cms.articles.update". Si oui, alors le module pourra afficher un bouton "modifier" dans l'interface d'administration, et ne l'affichera pas sinon. (Le module devra également faire cette vérification lors de la sauvegarde d'un article, pour éviter les "fraudes" ;-) ).