Comment définir les accès d’un Smart Field
Recommandation
Si vous n’êtes pas familier avec la Sécurité des accès aux Smart Fields
et leur fonctionnement, il est fortement
recommandé de lire la documentation associée
disponible ici
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 ?
Informations
Les droits appliqués à l’aide des Field Access Layer (Calques de droit) permettent uniquement d’augmenter les droits initiaux et non pas de les diminuer.
Vous trouverez plus d’informations sur les calques de droits et leurs effets sur la documentation associée
- Aux vues des effets des calques sur les droits, commençons par abaisser les droits de bases de la Smart Structure
Consommable
etPlat
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:structure-configuration name="CONSOMMABLE" label="Consommable">
<smart:icon file="consommable.png"/>
<smart:class>Cogip\Restauratec\SmartStructures\Consommable\ConsommableBehavior</smart:class>
<smart:fields reset="true">
<smart:field-set name="consommable_frame" type="frame" access="ReadWrite" label="Informations relatives au consommable">
<smart:field-text name="consommable_title" needed="true" is-title="true" access="Read" label="Titre"/>
<smart:field-htmltext name="consommable_description" access="Read" label="Description"/>
<smart:field-money name="consommable_price_excl_vat" access="Read" label="Prix HT (€)"/>
<smart:field-money name="consommable_price_incl_vat" access="Read" label="Prix TTC (€)"/>
<smart:field-account access="Read" name="consommable_creator" label="Créateur"/>
</smart:field-set>
</smart:fields>
<smart:hooks>
<smart:field-hook event="onPreRefresh" field="consommable_price_excl_vat">
<smart:field-callable function="::calculatePriceExclVat"/>
</smart:field-hook>
</smart:hooks>
<smart:defaults/>
</smart:structure-configuration>
</smart:config>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:structure-configuration name="PLAT" label="Plat">
<smart:extends ref="CONSOMMABLE"/> <!-- La smart structure PLAT hérite de la smart structure CONSOMMABLE -->
<smart:icon file="plat.png" />
<smart:class>Cogip\Restauratec\SmartStructures\Plat\PlatBehavior</smart:class>
<smart:fields reset="true">
<smart:field-set name="consommable_frame" extended="true">
<smart:field-enum name="plat_type" label="Type de plat" relation="Plat_Type" access="Read" />
<smart:field-date name="plat_validity_date" label="Disponible jusqu'au" access="Read" />
</smart:field-set>
</smart:fields>
<smart:hooks />
<smart:defaults />
</smart:structure-configuration>
</smart:config>
Créons maintenant le fichier permettant de paramétrer les droits de Smart Field avec la commande
createSetting
npx @anakeen/anakeen-cli createSetting --type FieldAccess --name FALL_PLAT --associatedSmartStructure PLAT
Voici le fichier généré :
src/vendor/<vendorName>/<moduleName>/SmartStructures/Plat/PlatSettings/230-FieldAccessFallPlat.xml
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:field-access-layer-list name="FALL_PLAT" label="FALL_PLAT"
structure="PLAT">
<!-- Les accès des utilisateurs sur les Smart Fields sont définis dans ce fichier -->
<!-- Lien vers le guide How To : https://documentation.ap4.anakeen.com/anakeen-platform-howto/FieldAccessLayer/#howToProceed -->
<!-- Lien vers le manuel de référence : https://documentation.ap4.anakeen.com/anakeen-platform/security/fields/#droits-des-smart-fields-field-access-layer -->
<!-- Permet de configurer un calque (field access layer), vous pouvez créer autant de calques que vous le souhaitez -->
<!--
<smart:field-access-layer name="FAL<name_field_access_layer>" label="<description>" structure="PLAT">
<smart:description>Description of the field-access-layer</smart:description>
<smart:field-access field="<field_1>" access="Read"/>
<smart:field-access field="<field_2>" access="Write"/>
</smart:field-access-layer>
-->
<!-- Liste tous les calques que vous avez créés au-dessus -->
<!--
<smart:field-access-layer-list name="FALL_PLAT_LAYER" label="<description>" structure="PLAT">
<smart:field-access-layer ref="FAL<name_field_access_layer>" access-name="<name_of_your_element>"/>
</smart:field-access-layer-list>
-->
<!-- Lie vos calques avec des comptes (role/ user/ group) -->
<!--
<smart:access-configuration name="FALL_PLAT_LAYER" profil-type="FIELDACCESSLAYERLIST" access-structure="PLAT">
<smart:element-access access="<name_of_the_element_set_above>" account="<role/group/user_name>"/>
</smart:access-configuration>
-->
</smart:field-access-layer-list>
</smart:config>
Définir les droits d’accès de chaque Smart Field pour chaque rôle (calques de droit / field access layer):
<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:field-access-layer-list name="FALL_PLAT" label="Plat Field Access" structure="PLAT">
<!-- Définition des droits d’accès des Smart Field pour la direction -->
<smart:field-access-layer name="FAL_Direction" label="Direction access" access-name="Direction" structure="PLAT">
<smart:description>Les directeurs peuvent éditer les plats</smart:description>
<smart:field-access field="consommable_title" access="ReadWrite"/>
<smart:field-access field="consommable_description" access="ReadWrite"/>
<smart:field-access field="consommable_price_excl_vat" access="Read"/>
<smart:field-access field="consommable_price_incl_vat" access="ReadWrite"/>
<smart:field-access field="plat_type" access="ReadWrite"/>
<smart:field-access field="plat_validity_date" access="ReadWrite"/>
</smart:field-access-layer>
<!-- Définition des droits d’accès des Smart Field pour les cuisiniers -->
<smart:field-access-layer name="FAL_Cuisiniers" label="Cuisiniers access" access-name="Cuisiniers" structure="PLAT">
<smart:description>Les cuisiniers ne peuvent que consulter les plats</smart:description>
<smart:field-access field="consommable_title" access="Read"/>
<smart:field-access field="consommable_description" access="Read"/>
<smart:field-access field="consommable_price_excl_vat" access="Read"/>
<smart:field-access field="consommable_price_incl_vat" access="Read"/>
<smart:field-access field="plat_type" access="Read"/>
<smart:field-access field="plat_validity_date" access="Read"/>
</smart:field-access-layer>
</smart:field-access-layer-list>
<smart:access-configuration name="FALL_PLAT" profil-type="FIELDACCESSLAYERLIST" access-structure="PLAT">
<smart:element-access access="Cuisiniers" account="role_cuisinier"/>
<smart:element-access access="Direction" account="role_direction"/>
</smart:access-configuration>
</smart:config>
Référencer cette liste de calques (Field Access Layer List) 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:field-access-configuration ref="FALL_PLAT"/>
</smart:accesses>
</smart:structure-configuration>
</smart:config>
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
Résultat / Vérification
Pour vérifier que ces modifications ont bien été prises en compte, créons tout d'abord un Plat
:
http://localhost:8080/api/v2/smart-elements/PLAT/views/!defaultCreation.html
Une fois crée, vérifions que les droits sont bien appliqués sur les rendus de consultation et modification :
- Avec un utilisateur ayant le rôle
role_direction
(édition) :
- Avec un utilisateur ayant le rôle
role_cuisinier
(consultation) :
La direction peut modifier n'importe quel plat en cliquant sur le bouton Modifier
tandis que les cuisiniers ne peuvent
que consulter les plats, ce bouton leur étant grisé.