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 et Plat :






 
 
 
 
 
 
 










<?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

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 :

Droit direction

Et ensuite ?

Comment restreindre la saisie d'un Smart Field