Comment définir les accès d’un Smart Element
Prérequis
Afin de pouvoir suivre ce guide, il faut préalablement avoir créé un formulaire (Une Smart Structure).
De plus, il faut avoir abordé la notion de Comptes
:
Comment créer un compte (Utilisateur / Rôle / Groupe)
Comment procéder ?
Nous verrons dans ce chapitre comment sécuriser les quatre opérations de base qui sont caractérisées par CRUD à savoir :
- Create
- Read
- Update
- Delete
Recommandation/Information
Si vous n’êtes pas familier avec la Sécurisation des Smart Elements (Profil)
et leur fonctionnement, il est fortement
recommandé de lire la documentation associée
disponible ici
PFAM
(Profil de Smart Structure) : Droit de créer des Smart Elements ou de voir la Smart StructurePDOC
(Profil de Smart Element) : Droit de voir, modifier ou supprimer des Smart Elements
Nom interne | Description | Description | PDOC | PFAM |
---|---|---|---|---|
view | Voir | Voir les caractéristiques du Smart Element, du dossier ou de la recherche. Le fait de ne pas voir un dossier n’implique pas de ne pas voir les Smart Elements contenus dans le dossier. | ||
edit | Modifier | Modifier les caractéristiques du Smart Element, du dossier. | ||
delete | Supprimer | Supprimer le Smart Element, le dossier, la recherche . | ||
create | Créer | Autorise la création de Smart Element de cette Smart Structure. | ||
icreate | Créer manuellement | Autorise la création de Smart Element de cette Smart Structure à partir de l’interface. Si ce droit n’est pas mis et que create est mis, l’utilisateur ne pourra créer le Smart Element que de manière indirecte (soit sur une transition, soit sur toute autre action particulière mis en place par l’administrateur). Sans ce droit les menus de création de cette Smart Structure sont inaccessibles. Si ce droit est mis il faut que le droit create soit aussi mis. |
Créer un profil - Anakeen CLI
- Créer le profil avec la commande
createSetting
npx @anakeen/anakeen-cli createSetting --type Profile --name Plat --associatedSmartStructure PLAT
Attention
Si la Smart Structure renseignée pour --associatedSmartStructure
existe, alors le profil est placé automatiquement
dans le dossier src/vendor/<vendorName>/<moduleName>/SmartStructures/Plat/PlatSettings/PlatSettings
.
Sinon il est placé à la racine du module, emplacement non pris en compte par défaut dans le fichier info.xml
. Si vous
êtes dans ce cas, il faut donc rajouter l’instruction permettant d’importer ce nouveau fichier :
<process command="./ank.php --script=importConfiguration --file=./vendor/<vendorName>/<moduleName>/120-Profile<SmartStructureName>.xml"/>
puis build & deploy l’application :
npx @anakeen/anakeen-cli deploy -c http://localhost:8080/control -s . -u admin -p anakeen --reinstall
Voici le fichier que la commande génère
src/vendor/<vendorName>/<moduleName>/SmartStructures/Plat/PlatSettings/120-ProfilePlat.xml
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<!-- Un profil de Smart Element permet de déterminer les droits acquis pour les rôles, les groupes et les utilisateurs pour un Smart Element donné. -->
<!-- Lien vers le guide How To : https://documentation.ap4.anakeen.com/anakeen-platform-howto/CreateSmartStructure/#creation-d-un-ou-plusieurs-profils -->
<!-- Lien vers le manuel de référence : https://documentation.ap4.anakeen.com/anakeen-platform/security/smart/#le-profil-de-smart-element -->
<!-- profil de Smart Structure (droit de créer des Smart Elements ou de voir la Smart Structure) -->
<!--
<smart:access-configuration name="PFAM_PLAT" label="Plat" profil-type="PFAM">
<smart:element-access access="create" account="<role_name>"/>
<smart:element-access access="icreate" account="<role_name>"/>
</smart:access-configuration>
-->
<!-- profil d’une étape d’un Smart Element (droit de voir, modifier ou supprimer des Smart Elements) -->
<!--
<smart:access-configuration name="PDOC_PLAT_E1" label="<label>" access-structure="PLAT">
<smart:description><description></smart:description>
<smart:element-access access="view" field="<field_name_of_field_account>"/>
<smart:element-access access="edit" field="<field_name_of_field_account>"/>
</smart:access-configuration>
-->
</smart:config>
Il reste maintenant à paramétrer ce profil afin de sécuriser nos opérations CRUD.
Créer
Opération Les Smart Elements de la Smart Structure PLAT
ne peuvent être créés actuellement que par la direction du restaurant.
Voilà comment cela se caractérise au travers d’un profil :
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:access-configuration name="STRUCTURE_PLAT_PROFILE" label="Structure_Plat_Profile" profil-type="PFAM">
<smart:element-access access="create" account="role_direction"/>
<smart:element-access access="icreate" account="role_direction"/>
</smart:access-configuration>
</smart:config>
Read, Update, Delete
Opérations <?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:access-configuration name="STRUCTURE_PLAT_PROFILE" label="Structure_Plat_Profile" profil-type="PFAM">
<smart:element-access access="create" account="role_direction"/>
<smart:element-access access="icreate" account="role_direction"/>
</smart:access-configuration>
<!-- Le profil standard est implicitement par défaut de type PDOC -->
<smart:access-configuration name="ELEMENT_PLAT_PROFILE" label="Element_Plat_Profile" access-structure="PLAT">
<!-- Tous les membres du restaurant peuvent voir les caractéristiques des Smart Element de cette Smart Structure -->
<smart:element-access access="view" account="role_restaurant_member" />
<!-- Seul le créateur du consommable peut modifier ce Smart Element -->
<smart:element-access access="edit" field="consommable_creator"/>
<!-- Seul la direction peut supprimer un Smart Element de cette Smart Structure -->
<smart:element-access access="delete" account="role_direction"/>
</smart:access-configuration>
</smart:config>
Définir un profil par défaut
Informations
Une Smart Structure peut indiquer un profil par défaut pour ses Smart Elements.
Une fois enregistrée, tous les Smart
Elements sont liés au même profil lors de leur création.
Les Smart Elements déjà existants ne sont pas affectés !
Pour indiquer le profil par défaut d’une Smart Structure, il faut se rendre dans le fichier de configuration de la Smart
Structure concernée src/vendor/<vendorName>/<moduleName>/SmartStructures/Plat/500-PlatSettings.xml
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:ui="https://platform.anakeen.com/4/schemas/ui/1.0">
<!-- Ce fichier permet de lier votre Smart Structure avec vos "profil", "Field access layer" -->
<!-- Lien vers le guide How To : Voir les guides sur les "profile", "Field access layer", "mask" pour voir comment configurer ce fichier -->
<!-- Lien vers le manuel de référence : Pareil que les guides -->
<ui:render ref="PLAT">
<ui:render-access class="Cogip\Restauratec\SmartStructures\Plat\Render\PlatAccess"/>
</ui:render>
<smart:structure-configuration name="PLAT">
<smart:accesses>
<!-- Référence le profil de structure (type PFAM) -->
<smart:structure-access-configuration ref="STRUCTURE_PLAT_PROFILE" />
<!-- Référence le profil standard (PDOC) -->
<smart:element-access-configuration ref="ELEMENT_PLAT_PROFILE" />
</smart:accesses>
</smart:structure-configuration>
</smart:config>
Résultat / Vérification
Attention
Pensez à effectuer une réinstallation afin que l’application prenne en compte les modifications effectuées :
npx @anakeen/anakeen-cli deploy -c http://localhost:8080/control -s . -u admin -p anakeen --reinstall
Rendons-nous sur le formulaire de création d'un plat afin de vérifier que nos profils sont bien actifs :
http://localhost:8080/api/v2/smart-elements/PLAT/views/!defaultCreation.html
- Avec un utilisateur ayant le rôle
role_direction
:
- Avec un utilisateur ayant le rôle
role_cuisinier
:
La direction peut ainsi créer des plats à l'inverse des cuisiniers qui n'ont pas les droits requis.
Information
Ce qui n’est pas profilé n’est pas accessible.