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 Structure
  • PDOC (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

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>/240-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.

Opération Créer

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>

Opérations Read, Update, Delete








 
 
 
 
 
 
 
 
 


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

Creation_plat

  • Avec un utilisateur ayant le rôle role_cuisinier :

Message_erreur

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.

Et ensuite ?

Comment définir les accès d’un Smart Field