Gestion des droits
Les couches d’assignation
Lors de la décision par le système de valider ou non l’action d’un utilisateur, les différents droits d’accès sont consultés à tous les niveaux. Voici quelques possibles combinaisons :
-
Groupe.
-
Groupe → Rôle de groupe.
-
Utilisateur → Groupe → Rôle du groupe.
-
Utilisateur → Rôle utilisateur → Groupe → Rôle du groupe.
Une couche d’assignation des droits est un point de rattachement, lié à un utilisateur, qui permet de regrouper un ensemble de droits d’accès.
Il existe 3 couches d’assignation attribuées à :
-
L’utilisateur lui-même.
-
Les groupes d’utilisateurs.
-
Les rôles.
-
Les autorisations comprises dans les rôles.
Ces trois couches d’assignation interagissent de la manière suivante :
-
Un utilisateur peut appartenir à un seul groupe et avoir plusieurs rôles.
-
Un groupe peut avoir plusieurs rôles.
Ces couches permettent de simplifier l’organisation des différents droits d’accès mis à la disposition d’un utilisateur et ne sont donc pas régies par des priorités. Lors de la décision par le système de valider ou non l’action d’un utilisateur, les différents droits d’accès sont consultés à tous les niveaux.
Lors de la décision par le système de valider ou non l’action d’un utilisateur, les différents droits d’accès sont consultés à tous les niveaux.
Gestion des permissions
Accès : Administration → Gestion des utilisateurs → Les Permissions / Meta permissions
Il existe 3 familles de droits d’accès :
- Les permissions : une permission c’est la permission sur un objet (Accès : Administration → Gestion des utilisateurs → Les Permissions). Dans ce menu, vous allez trouver la liste de toutes les permissions que vous avez dans l’application. Chaque permission est attachée à un modèle (objet dans l’application). Vous allez avoir des autorisation associées (lecture / écriture / créer / supprimer / exporter).
-
Lecture : l’utilisateur a le droit de lire l’enregistrement.
-
Ecriture : l’utilisateur a le droit de modifier l’enregistrement.
-
Créer : l’utilisateur a le droit de créer un enregistrement.
-
Supprimer : l’utilisateur a le droit de supprimer l’enregistrement.
-
Exporter : l’utilisateur a le droit d’exporter l’enregistrement. 07:52
-
Les permissions par champs (Meta permissions) ;
-
Les permissions sur les menus.
Chacune de ces familles utilise une ou plusieurs autorisations parmi les 5 suivantes (menu “Autorisations”) :
-
Lecture ;
-
Modification ;
-
Création ;
-
Suppression :
-
Export.
Vous pouvez également ici y définir des conditions et paramètres en JPQL (par exemple, pour filtrer les commandes ventes uniquement sur la liste des sociétés définis dans la fiche utilisateur).
Les permissions par champ permettent de travailler plus “finement” sur un objet. Elles sont interprétées à la fois au niveau du client (navigateur) et du serveur. Il est possible au sein d'un objet d'octroyer des droits que sur certains champs. Par exemple, vous pouvez donner les droits de modification de certaines informations relatives à un client (numéro de téléphone, email..) sans autoriser la modification d'autres champs (comme le nom du client).
Dans l’exemple suivant, vous retrouvez des permissions par champ sur l’objet SaleOrder. Cette Meta Permission sera ensuite ajouté dans un rôle.
Le principe est similaire à celui des permissions. Il faut indiquer un nom (de préférence en respectant une convention) et la référence de l'objet pour lequel vous désirez définir de nouvelles permissions.
Le tableau de règle permet ensuite de préciser pour chaque champ (en utilisant son nom technique) une règle qui remplacera la règle générale sur l’objet.
Les autorisations sont les mêmes que sur les permissions, suppression et création en moins.
Il est possible d’ajouter deux conditions :
-
Lecture seule si : pour rendre l'élément en lecture seule si la condition est vraie.
-
Caché si : cache l'élément si la condition est vraie.
- Conditions :
Il est possible d’attribuer une condition à une permission, ainsi la permission ne sera valable que si cette condition est vérifiée.
Écriture de la condition : les conditions s’écrivent en JPQL et peuvent faire référence à un ou plusieurs paramètres. Il faut utiliser le signe “?” a chaque fois qu’un paramètre doit être appelé. Un nouveau paramètre doit être défini pour chaque signe “?” de la condition.
Par exemple : self.user = ? AND self.company = ? sera forcément accompagné de 2 paramètres séparés par une virgule.
Dans cet exemple si l’utilisateur qui fait la partie de la société (condition : self.company.id in (?) avec le paramètre _user_companySet.id.plus(0) ), va pouvoir lire, modifier et créer un enregistrement.
- Paramètres :
Séparez les paramètres par une virgule, chaque paramètre correspond à un “?” dans l’expression de la condition, ce dans un ordre chronologique. il est nécessaire de répéter plusieurs fois le même paramètre si celui-ci correspond à plusieurs signes “?” dans la condition.
Les paramètres autorisés sont les suivants :
user : l’utilisateur connecté date : la date du jour time : l’heure du jour datetime : la date/heure du jour
Il est possible d’utiliser une expression sur l’utilisateur connecté, en utilisant des “.” pour séparer des noms de champs (nom technique). Exemple : user.activeCompany.id : représente l’id de la société rattachée à l’utilisateur.
Gestion des permissions / Meta permissions
Accès : Administration → Gestion des utilisateurs → Meta Permissions
Les Meta Permissions (permissions par champ) , au même titre que les autorisations, ce sont des autorisations qui se font pas uniquement sur un objet, mais sur tous les champs d’un objet.
Les permissions par champ permettent de travailler plus “finement” sur un objet. Elles sont interprétées à la fois au niveau du client (navigateur) et du serveur. Il est possible au sein d'un objet d'octroyer des droits que sur certains champs. Par exemple, vous pouvez donner les droits de modification de certaines informations relatives à un client (numéro de téléphone, email..) sans autoriser la modification d'autres champs (comme le nom du client).
Dans l’exemple suivant, vous retrouvez des permissions par champ sur l’objet SaleOrder. Cette Meta Permission sera ensuite ajouté dans un rôle.
Créer une nouvelle meta permission
Accès : Administration → Gestion des utilisateurs → Meta Permissions → cliquez sur +
-
Nom : renseignez le nom. Par exemple, SaleOrder.
-
Modèle : renseignez ici le modèle. Par exemple, com.axelor.apps.sale.db.SaleOrder.
Copiez le nom du modèle afin de l’utiliser sur le champ du modèle sur la fiche de la meta permission.
- Règles : dans la table Règles, sélectionnez un champ et l’autorisation pour ce champ (Lecture / Écriture / Export). Par défaut, si l’utilisateur a l’accès à un modèle (c’est-à-dire, un objet), il va avoir accès à tous les champs (en lecture / en modification / en export).
Les permissions par champ sont des permissions qui donnent le droit comme Lecture, sur un champ. Par exemple, vous pouvez lire le champ sans avoir le droit de le modifier.
-
Champ : dans la table Règles, copiez/renseignez le nom technique d’un champ afin de l’ajouter dans la colonne “Champ”. Par exemple, dans la colonne “Champ” indiquez le nom technique de la Société (company).
-
Lecture : si vous souhaitez que le champ de la Société (“company”) soit en Lecture seule, cochez la case “Lecture”.
Si vous rattachez cette permission à un rôle, ou à un utilisateur directement, ou bien même un groupe d’utilisateurs. L’utilisateur qui a accès à ce groupe là ou à ce rôle, ou directement à cette permission, n’aura accès qu’en lecture seule au champ indiqué dans la table “Règles”.
-
Rattacher la permission : ensuite, rattachez la permission à un groupe. Accès : Administration → Gestion des utilisateurs → Rôles → dans la liste des rôles, sélectionnez un rôle, par exemple, Sale User.
-
Permissions (champs): dans la table “Permissions (champs)”, ajoutez un champ en cliquant sur +. Par exemple, ajoutez le champ “SaleOrder” sur lequel vous avez appliqué la Meta permission (le champ Société est en lecture seule).
Les permissions peuvent être appliquées sur les champs, mais aussi sur les boutons.
Par exemple, un utilisateur peut avoir l’accès à la création, lecture et la modification d’un Sale Order (devis client/commande client), cependant si la configuration a été faite, il aura l’accès qu’en lecture seule à la validation du devis (c’est-à-dire, le bouton de validation).
Attention, pour cela il faut d’abord configurer la Meta permission.
Assistant de génération des permissions
Les permissions sont généralement définies dans les groupes. En effet, créer manuellement les permissions par champ pour chaque élément d'une vue d'un objet peut prendre de temps.
Retrouvez ce menu dans Administration → Gestion des utilisateurs → Assistant gestion des permissions.
Un assistant est disponible afin de générer automatiquement les permissions.
L'assistant permet de sélectionner plusieurs groupes (tous les groupes sur lesquels on désire gérer les permissions) ainsi que les différents objets à gérer.
Créer fichier : un bouton "Créer fichier" permet de générer un fichier qui sera ensuite à compléter manuellement.
En première ligne de ce document vous retrouvez les noms des groupes sélectionnés.
En deuxième ligne se trouvent les noms des colonnes qui sont :
-
Object : le nom avec le package des objets sélectionnés.
-
Field : le nom du champ.
-
Title : le titre du champ en français.
7 colonnes répétées pour chaque groupe :
-
Lecture : permet de visualiser l'élément/l'objet.
-
Écriture : permet de modifier l'élément/l'objet.
-
Créer : uniquement pour l'objet.
-
Supprimer : uniquement pour l'objet.
-
Export : permet d'exporter l'élément/l'objet.
-
Lecture seule si : comme vu précédemment pour l'élément.
-
Cacher si : comme vu précédemment pour l'élément.
Il faut donc ensuite mettre un "x" dans chaque case du tableau en fonction des permissions que vous cherchez (sauf pour "Lecture seule si" et "Cacher si" où il faut rentrer une condition, donc une chaîne de caractères).
Exemple : sur le groupe Achat et Comptabilité, uniquement sur l’objet PurchaseOrder.
Une fois le fichier complété, il suffit de retourner là où il a été généré et de l'importer à la place de l'ancien, puis de cliquer sur le bouton "Importer les permissions" pour que les permissions soient créées dans les différents groupes.
Seuls les champs d'un objet sont automatiquement ajoutés lors de la génération du fichier. Pour gérer les permissions sur les autres éléments d'une vue, comme les boutons, il faut ajouter manuellement une ligne dans le fichier avec le nom du bouton dans la colonne « Champ» (le titre peut être ajouté dans la colonne « Titre » mais ceci n'est qu'une information pour l'utilisateur qui remplit le fichier).
Attention, cette ligne doit être ajoutée au même endroit que les champs de l'objet et non pas à la fin du fichier.
Cela génère en automatique des permissions. Ces permissions sont associées à des groupes.
Assistant de génération des permissions : cas pratique
Accès : Administration → Gestion des utilisateurs → Assistant gestion des permissions
Cet assistant permet de créer automatiquement des permissions et de les rattacher à des rôles.
- Créer un rôle : pensez à créer un rôle pour le module “Support Client”.
Accès : Administration → Gestion des utilisateurs → Rôles
Par exemple, les rôles suivants ont été créés :
-
Support client (Lecture seule)
-
Support client (Manager)
-
Support client (Technicien)
Le module “Support Client” consiste à une gestion des tickets. Dans un ticket, vous allez retrouver le nom de l’objet (modèle). Sur le formulaire, vous allez trouver plusieurs champs : des champs qui sont liés au module Help Desk, et d’autres champs qui font la référence à des objets qui sont liés à d’autres modules. Par exemple, le champ Client est lié au modèle Partner qui fait partie du module Base. Le champ Projet fait partie du module Projet, etc.
-
Assistant gestion des permissions : ensuite, ouvrez l’assistant gestion des permissions.
-
Type : sélectionnez le type “Rôles”.
-
Rôles : dans la table “Rôles”, sélectionnez les rôles que vous avez créés en amont (dans l’exemple, c’est “Support client - Lecture seule”, “Support client - Manager”, “Support client - Technicien”).
-
Objets : sélectionnez tous les objets qui sont liés à votre module (par exemple, des objets HelpDesk, comme Ticket / TicketStatus / TicketType etc).
-
Langue : sélectionnez la langue.
-
Créer fichier : cliquez sur le bouton “Créer fichier” afin de créer un fichier CSV.
-
Ouvrez le fichier et faites des modifications.
-
Dans le fichier, vous allez trouver une ligne pour chaque objet concerné.
-
Vous allez constater qu’il y a un regroupement par rôle (Lecture / Écriture / Créer / Supprimer / Exporter).
-
Vous allez également y trouver des Conditions.
-
Rôle par rôle, donnez des permissions. Par exemple, pour le rôle “Support client (Lecture seule)”, dans la colonne “Lecture”, marquez chaque objet (modèle) avec une croix (x) afin de confirmer que cet objet est disponible qu’en Lecture seule. Le reste des colonnes (Écriture, Créer, Supprimer, Exporter etc).
-
Pour le rôle “Support client (Manager)”, toutes les permissions ont été données (Lecture / Écriture / Créer / Supprimer / Exporter). De cette façon, un manager va avoir l’accès complet.
-
Pour le rôle “Support client (Technicien)”, donnez le droit de Lecture pour tous les objets, et donnez le droit de modification (Écriture) qu' à un seul objet (Ticket).
-
Vous pouvez également ajouter des conditions. Par exemple, renseignez une condition pour indiquer qu’un Technicien a le droit de modifier les tickets qui lui sont assignés.
-
Enregistrez les modifications apportées.
-
Fichier : téléchargez le fichier CSV que vous venez de modifier en cliquant sur l’icône.
-
Importer les permissions : cliquez sur le bouton “Importer les permissions” afin d’importer les permissions. Rafraichissez la page pour que les informations apparaissent sur la fiche du Rôle.
Pensez à télécharger le fichier CSV avant de lancer l’import des permissions.
- Rôle : ouvrez la fiche du Rôle. La table “Autorisations” sera remplie. Vous pouvez consulter chaque permission en cliquant sur son fichier.