Droits d’accès aux modules

Les droits sont déclarés dans le fichier app/Config/Rights.php. Les droits des modules gérés directement dans Ppci sont déclarés dans vendor/equinton/ppci/src/Config/Rights.php.

Pour tout module (route) qui doit être protégé, une entrée doit être rajoutée dans le tableau rights, ainsi : 

protected array $rights = [
    "storageConditionList" => ["consult"],
    "storageConditionChange" => ["param", "collection"],
    "storageConditionWrite" => ["param", "collection"],
    "storageConditionDelete" => ["param", "collection"],

Les droits par défaut gérés par Ppci sont les suivants :

  • admin : accès aux modules d’administration
  • consult : consultation des informations
  • manage : gestion au quotidien
  • param : accès aux paramètres du logiciel (rôle de l’administrateur métier)

D’autres droits peuvent être rajoutés dans l’application, comme c’est le cas dans l’exemple ci-dessus avec le droit collection. Ils sont décrits avec les tables acl* du schéma gacl.

Lors de l’accès à un module protégé, les droits de l’utilisateur sont calculés par le filtre RightsFilter (cf. principes.html), et l’accès n’est accordé que si l’utilisateur dispose d’un des droits déclarés dans le tableau rights.

Organisation des droits dans la base de données

Les droits sont gérés dans des tables présentes dans le schéma gacl.

  • acllogin : liste des logins des utilisateurs. Si un compte est créé dans la base locale
    d’identification (table logingestion), un enregistrement est également créé dans cette table.
  • aclappli : liste des applications gérées. Il est possible de gérer, à partir de
    la même base de données, plusieurs ensembles de droits, qui utilisent les
    mêmes logins. Dans la pratique, une seule entrée figure dans cette table. La valeur de aclappli doit être identique à la variable de configuration app.GACL_aco.
  • aclaco : liste des droits déclarés dans l’application ;
  • aclgroup : liste des groupes contenant les logins, et qui détiennent les droits.
    Un groupe peut hériter d’un autre groupe. Les droits associés au groupe
    parent sont également attribués au groupe hérité ;
  • acllogingroup : table permettant de déclarer les logins associés à un groupe ;
  • aclacl : table décrivant les droits détenus par un groupe.

Dans certains cas (identification LDAP ou CAS), et si la reconnaissance automatique des groupes est activée dans la configuration, il n’est pas nécessaire de déclarer les logins dans la table acllogin. C’est l’appartenance à un groupe de l’annuaire, déclaré par ailleurs dans la table aclgroup, qui permettra d’attribuer les droits.

L’algorithme d’attribution des droits va fonctionner ainsi :

  • recherche des groupes auquel appartient le login, soit de manière formelle (déclaration dans la table acllogingroup), soit de manière induite (groupe de l’annuaire déclaré dans la table aclgroup), soit en récupérant les groupes dont hérite le groupe courant où est déclaré le login
  • pour chacun des groupes d’appartenance, recherche dans la table aclacl des droits attribués aux groupes.