Intégrer les nuances d'habilitations des users pour le droit de modifier (ou non) des champs d'un formulaire

Request description

Bonjour,
Le paramétrage permet de paramétrer les possibilités de modification/lecture seule des champs de formulaire en fonction des états d’un objet-métier. Les deux angles fonctionnels sont donc l’objet-métier et l’état.
Mon besoin est d’ajouter une nuance d’habilitation pour que le droit de modifier (ou non) les champs ne dépende plus seulement de l’objet-métier et de l’état de l’objet dans le workflow, mais également des responsabilités du user.
Pouvez-vous me dire comment ajouter cette contrainte supplémentaire ?
Peut-on le faire directement dans le paramétrage ?
Ou doit-on utiliser les hooks du code Java, et dans ce cas, lequel ?
Tous mes essais n’ont pas permis pour l’instant d’obtenir qu’un champ soit modifiable en fonction des responsabilités du user.
Merci beaucoup pour votre aide.
Christophe Coudé

Steps to reproduce

This request concerns an up-to-date Simplicité instance
and these are the steps to reproduce it:

Technical information

Instance /health
---paste the content of your-instance.com/health---
Simplicité logs
---paste the content of the **relevant** server-side logs---
Browser logs
---paste content of the **relevant** browser-side logs---
Other relevant information

----E.g. type of deployment, browser vendor and version, etc.----

Bonjour,

Par paramétrage :

  • Vous pouvez paramétrer tout ça via une contrainte, en rajoutant [HASRESP:GROUP_NAME] dans l’expression de l’impact.

Par code :

  • Pour savoir si l’utilisateur a une responsabilité ou non, vous pouvez appeler getGrant().hasResponsibility("GROUP_NAME") GrantCore

  • Dans un hook initUpdate vous pouvez rendre modifiable vos champs avec la méthode getField("myField").setUpdatable(...) ObjectField

  • Sinon, vous pouvez implémenter le hook isUpdateEnable(...) ObjectHooks pour définir de manière globale si l’objet est modifiable.

Bonjour Alistair,
Je vous remercie.
Justement, j’ai utilisé le même code Java que vous avez mentionné mais cela ne fonctionne pas.
Je vais regarder pour le paramétrage.

Est-ce que vous pouvez me partager votre code ?

@Override
public boolean isUpdateEnable(String[] row) {
    boolean isFieldsUpdatable = true;
    if ((getGrant().hasResponsibility("LADOM_GROUP_CIP") || getGrant().hasResponsibility("LADOM_GROUP_GESTIONNAIRE") || getGrant().hasResponsibility("LADOM_GROUP_AGENT"))) {
        isFieldsUpdatable = false;
    }
    //Champ modifiable_
    switch (getFieldValue(FIELD_ACT_STATUT)){
        case LISTCODE_ETATDOSSIER_BON_EMIS:
        case LISTCODE_ETATDOSSIER_BON_UTILISE:verrouillageChampOngletToutesZones(isFieldsUpdatable);break;
        default: verrouillageChampOngletToutesZones(true);break;
    }
    return super.isUpdateEnable(row);
}

/**
 * Les champs du formulaire sont modifiables ou pas suivant le parametre d'entrée
 * @param isUpdatable
 */
private void verrouillageChampOnglet(String zoneAttribut, boolean isUpdatable){
    //Zone d'attribut de l'onglet Projet
    if (getFieldArea(zoneAttribut) != null) {
        List<ObjectField> listChamp = getFieldArea(zoneAttribut).getFields();
        for (ObjectField champ:listChamp) {
            if (champ.getVisibility() == ObjectField.VIS_FORM) {
                champ.setUpdatable(isUpdatable);
            }
        }
    }
}

/**
 * Les champs du formulaire sont modifiables ou pas suivant le parametre d'entrée
 * @param isUpdatable
 */
private void verrouillageChampOngletToutesZones(boolean isUpdatable){
    List<String> listeZonesAttributs = List.of("LadDossierAct-3", "LadDossierAct-5", "LadDossierAct-7", "LadDossierAct-8", "LadDossierAct-9", "LadDossierAct-10");
    listeZonesAttributs.forEach(e -> verrouillageChampOnglet(e, isUpdatable));
}

Finalement, on a réussi à obtenir ce qu’on voulait faire grâce à l’indication [HASRESP:GROUP_NAME]. Merci Alistair.

Je précise que les contraintes peuvent aussi être habilités à 1 ou N groupes par paramétrage ce qui peut éviter le recours à [HASRESP:...] dans les expressions:

Cf. les contraintes sur DemoOrder de la démo => l’attribut statut est non modifiable directement sauf pour le groupe DEMO_ADMIN via la contrainte ci-dessus qui ne s’exécute que pour les users ayant une responsabilité sur ce groupe

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.