Message : Droits insuffisants:nomtable

Bonjour,

J’ai une table principale “demande” qui est en lien avec une table “prestation”

Trois groupes sont créés pour cette application :
Admin : CRUD sur les 2 tables
RH : CRU sur demande et R sur prestation
DSST : RU sur demande et R sur prestation

En tant que RH, je créée une demande et je sélectionne une prestation. A l’enregistrement j’ai le message Droits insuffisants : GepexBoPrestation

En tant que DSST je peux sélectionner une autre prestation dans la demande, mais j’ai le même message à l’enregistrement.

Dans les 2 cas l’enregistrement abouti quand même avec la prestation choisie.

je n’ai rien dans les logs et je ne vois pas ce que j’oublie dans la config…

Simplicité version5.1.29
Built on2022-02-11 19:20

Fabrice

Bonjour,

Donc ce n’est pas un problème de mise à jour de la Demande.

Avez vous du code qui fait des mises à jour sur l’objet Prestation ?
Si oui, sur quelle instance et dans quel hook ?

Si c’est celle de la session du User, il faut nécessairement lui ajouter des droits temporaire de mises à jour. Design pattern :

// change les droits CRUD
boolean oldcrud[] = getGrant().changeAccess("GepexBoPrestation", true, true, true, false);
try {
  // ... update sur GepexBoPrestation ...
} 
finally {
  // remettre les droits initiaux
  getGrant().changeAccess("GepexBoPrestation", oldcrud);
}

Le user DSST et RH ne font que sélectionner une prestation, il n’y a donc pas de mise à jour dans Prestation… je me trompe?

Code Prestation:

public class GepexBoPrestation extends ObjectDB {
	private static final long serialVersionUID = 1L;


	@Override
	public void initCreate(){
		AppLog.info(getClass(), "::::::::le initCreate a été appelé:::::::: ", null ,  getGrant());
        attributsTechniques("create");

	}
	
	@Override
	public void initUpdate(){
   		AppLog.info(getClass(), "::::::::initUpdate a été appelé:::::::: ", null ,  getGrant());
        attributsTechniques("update");
	}
		

	public void attributsTechniques(String type) {
  		AppLog.info(getClass(), "::::::::création des attributs techniques::::::::", null ,  getGrant());
		DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");  
		LocalDateTime now = LocalDateTime.now();  

        String login = getGrant().getSessionInfo().getLogin();
        
        if (type.equals("create")) {
	        this.setFieldValue("GepexBoPrestationCreePar", login);
	        this.setFieldValue("GepexBoPrestationCreeLe", dtf.format(now));
        	
        }
        if (type.equals("update")) {
	        this.setFieldValue("GepexBoPrestationModifieePar", login);
	        this.setFieldValue("GepexBoPrestationModifieeLe", dtf.format(now));
       	
        }
	}
}

Il y a un accès à l’objet quelque part. Si vous êtes sûr de donner les droits de lecture, c’est un pb d’écriture.

Le code qui fait la mise à jour sur l’objet peut être n’importe où.
Que contient le code de la Demande au moment du save, le back passe par :

  • pre/postValidate
  • preSave
    • preCreate
    • postCreate
      ou
    • preUpdate
    • postUpdate
  • postSave

C’est peut être là qu’il y a un accès en écriture sur prestation.

@fabrice

As tu pu avancer sur ce point et trouver l’origine du problème de droits ?

Pense à utiliser changeAccess (voir plus haut) pour autoriser temporairement du CRUD si certains groupes n’ont pas les droits UI sur certains objets, mais que du code back doit quand même faire des mises à jour sur ces objets.