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
diponible 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-account>
</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"></smart:extends>
<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">
<!--
<smart:field-access-layer name="FALL_PLAT_LAYER" label="Layer example" access-name="Example">
<smart:field-access field="field_1" access="ReadWrite"/>
<smart:field-access field="field_2" access="ReadWrite"/>
<smart:field-access field="field_3" access="Read"/>
</smart:field-access-layer>
-->
</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: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">
<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>
<ui:render ref="PLAT">
<ui:view-control ref="CVDOC_PLAT"/>
</ui:render>
</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éifier que ces modifications ont bien été prises en compte, rendons-nous dans le Development Center, partie
Security
et cliquons sur View Config
sur le Field Access venant d'être créé, ou via l'url suivante :
http://localhost:8080/devel/security/fieldAccess/FALL_PLAT/config
- Droits par défaut
- Il est possible d'appliquer un calque en particulier pour voir quel seront les droits d'accès finaux des Smart Fields concernés :