Comment paramétrer le cycle de vie - Comment créer des profils dynamiques

Prérequis

Afin de pouvoir suivre ce guide, il faut préalablement avoir vu comment créer un profil.

De plus, il faut avoir abordé la notion de Cycle de vie : Comment créer cycle de vie

Création d’un ou plusieurs profils

Pour pouvoir créer un profil pour le cycle de vie il va falloir utiliser le même fichier de profil que celui des profils statiques.

Si vous ne l’avez pas encore créé voici un lien vers le tutoriel de Création de profil

Voici le fichier généré src/vendor/<vendorName>/<moduleName>/SmartStructures/<SmartStructureName>/<SmartStructureName>Settings/120-Profile<SmartStructureName>.xml

<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
    <smart:access-configuration name="<SmartStructureName>" label="<SmartStructureName>">
        <!--
        <smart:element-access access="view" account="account1"/>
        <smart:element-access access="view" account="account2"/>
        -->
    </smart:access-configuration>
</smart:config>

Il reste maintenant à paramétrer ce profil afin de sécuriser les transitions du cycle de vie.

Définir les profils de chaques étapes

Prenons comme exemple la smart Structure PLAT qui contient quatre états possibles différents et suivra donc le modèle d’état suivant : Rédaction => En test => À la carte => Retiré.

Dans le fichier xml généré vous allez pouvoir ajouter un profil pour chaque états du cycle de vie:

src/vendor/Cogip/Restauratec/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">
   <smart:access-configuration name="PDOC_PLAT_E1" label="En cours de rédaction" access-structure="PLAT">
       <smart:description>A cet état le plat ne peut être vu, modifié et supprimé seulement par le créateur </smart:description>
       <smart:element-access access="view" field="consommable_creator"/> <!-- access = definit l’accés de l’état / field = spécification du field-account de la smartStructure (par exemple le créateur du smart element) -->
       <smart:element-access access="edit" field="consommable_creator"/>
       <smart:element-access access="delete" field="consommable_creator"/>
   </smart:access-configuration>

   <smart:access-configuration name="PDOC_PLAT_E2" label="En test" access-structure="PLAT">
       <smart:description>A cet état le plat peut être vu par tout le monde mais seul le créateur peut le modifier</smart:description>
       <smart:element-access access="view" account="role_restaurant_member"/>
       <smart:element-access access="edit" field="consommable_creator"/>
   </smart:access-configuration>

   <smart:access-configuration name="PDOC_PLAT_E3" label="A la carte" access-structure="PLAT">
       <smart:description>A cet état le plat est en lecture seul par tous le monde</smart:description>
       <smart:element-access access="view" account="role_restaurant_member"/>
   </smart:access-configuration>

   <smart:access-configuration name="PDOC_PLAT_E4" label="Retiré" access-structure="PLAT">
       <smart:description>A cet état le plat est en lecture seul par tous le monde</smart:description>
       <smart:element-access access="view" account="role_restaurant_member"/>
   </smart:access-configuration>
</smart:config>
Nom interne Description Description PDOC
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 .

Lier les profils au cycle de vie

Maintenant il ne vous reste plus qu’à lier vos profils aux états du cycle de vie.

Dans le fichier src/vendor/Cogip/Restauratec/SmartStructures/Plat/PlatWorkflows/WdocPlatWorkflow/130-WdocPlatWorkflowPermissions.xml:

<?xml version="1.0" encoding="UTF-8"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0" xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0">
   <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
   <!--Step Element Accesses of workflow: profile and field accesses reference-->
   <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
   <workflow:config xmlns:workflow="https://platform.anakeen.com/4/schemas/workflow/1.0" name="WDOC_PLAT" structure="PLAT" model="WFAM_PLAT">
       <workflow:steps>
           <workflow:step ref="plat_e1"> <!-- wfam* = référence vers le nom de l’état du cycle de vie -->
               <workflow:element-access-configuration ref="PDOC_PLAT_E1"/> <!-- PDOC* = nom de votre profil-->
           </workflow:step>
           <workflow:step ref="plat_e2">
               <workflow:element-access-configuration ref="PDOC_PLAT_E2"/>
           </workflow:step>
           <workflow:step ref="plat_e3">
               <workflow:element-access-configuration ref="PDOC_PLAT_E3"/>
           </workflow:step>
           <workflow:step ref="plat_e4">
               <workflow:element-access-configuration ref="PDOC_PLAT_E4"/>
           </workflow:step>
       </workflow:steps>
   </workflow:config>
</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

Nous souhaitons vérifier qu'à l'état En cours de rédaction, le plat ne peut être vu, modifié et supprimé seulement par le créateur.

Pour ce faire, créons un plat avec un utilisateur ayant le rôle role_direction :

http://localhost:8080/api/v2/smart-elements/PLAT/views/!defaultCreation.html

Une fois le plat crée, vérifions qu'avec cet utilisateur le plat peut être vu, modifié et supprimé :

createur_droit

À l'inverse, vérifions que pour ce même Plat, un utilisateur ayant le rôle role_cuisinier n'a pas accès au plat :

cuisinier_droit

Et ensuite ?

Comment paramétrer le cycle de vie - Envoi de mail