Droits CRUD sur lien N,N en pillbox

Bonjour,

Sur un lien N,N affiché en pillbox, j’aimerais que création, suppression et modification ne soient pas possibles si le parent ne peut pas être modifié. Mais j’ai l’impression que cela ne fonctionne pas comme pour les affichages en panel.

  • le parent est-il renseigné pour un affichage en pillbox ?
  • quelle est la fonction à utiliser pour identifier l’instance ? Je n’ai pas trouvé de méthode ressemblant à IsPillboxInstance, est-ce qu’il faut utiliser IsPanelInstance ?

Merci d’avance pour votre aide !
Emmanuelle

Il faut implémenter la règle dans le isUpdateEnable de l’objet de relation N-N en testant le parent via getParent()

Oui c’est ce que j’ai fait mais cela ne semble pas fonctionner. J’ai un objet parent en lecture seule mais les étiquettes peuvent être manipulées :

image

		@Override
	public boolean isUpdateEnable(String[] row) {
		
		ObjectDB parent = getParentObject();
		if (parent != null)
			return parent.isUpdateEnable(parent.getValues());
		
		return super.isUpdateEnable(row);
		
	}
@Override
	public boolean isCreateEnable() {
		
		//Can create link if parent can be updated
		ObjectDB parent = getParentObject();
		if (parent != null)
			return parent.isUpdateEnable(parent.getValues());
		
		return super.isCreateEnable();
		
	}
	
	@Override
	public boolean isDeleteEnable(String[] row) {
		
		//Can delete link if parent can be updated
		ObjectDB parent = getParentObject();
		if (parent != null)
			return parent.isUpdateEnable(parent.getValues());
			
		if (isRepositoryArchitect() || isRepositoryArchitectCorp())
		{
			if (getCreatedBy().equals(getGrant().getLogin()))
				return true;
			else
				return false;
		}	
			
		return super.isDeleteEnable(row);		
	}
	
	@Override
	public boolean isActionEnable(String[] row, String action) {

		if (action.startsWith("associate") && (isRepositoryArchitect() || isRepositoryArchitectCorp()))
		{					
			return isCreateEnable();
		}
		return super.isActionEnable(row, action);
	}

Est-ce que j’ai mal codé quelque chose ?

On parle bien des hooks l’objet de relation N-N ?

Bonjour,

Une pillbox UI simplifie l’affichage d’une liste fille complète et donc ne fonctionne pas tout à fait comme un panel complet.

Les actions de la pillbox ($ui.displayReferencePillbox) s’affichent en fonction des droits (grant.accessCreate, accessDelete… de la N,N) ou d’un paramètre read=true, mais ne doivent pas tenir compte des metadata remontés par les hooks de l’instance “panel” comme pour une liste fille.

On va regarder pour que ça en tienne compte (appel des metadata + filtrage des actions possibles).

Oui il s’agit bien de l’objet de relation N,N.
Merci d’avance pour le correctif !

Après vérification, les metadata du CONTEXT_PANELLIST sont effectivement présentes en front même pour une pillbox, l’évolution sera donc très simple à faire pour tenir compte du retour des hooks de la N,N.

	@Override
	public boolean isCreateEnable(String[] row) {		
		ObjectDB parent = getParentObject();
		if (parent!=null && isPanelInstance() && parent.getName().equals("xxx"))
			return parent.isUpdateEnable(parent.getValues());
		...
	}

Plutot que de ré-appeler les hooks parent ce qui peut prendre du temps car appelés de nombreuses fois pour chaque ligne d’une liste fille * (création + copy + suppr…).
Il faudrait passer par une variable qui indique que l’objet parent X est non modifiable.

Dans le hook parent isUpdateEnable :
grant.setParameter("MY_UPDATE_X", "yes" or "no");

et dans les hooks isCreateEnable et isDeleteEnable de la N,N
...return "yes".equals(grant.getParameter("MY_UPDATE_X"));

beaucoup plus rapide.

1 Like

L’évolution a été faite en V5 et backportée en V4, et sera disponible au prochain build.

  • Le hook isCreateEnable : masquera la loupe et la recherche par completion
  • Le hook isDeleteEnable : retirera le bouton de suppression des items concernés

A tester dans votre cas d’usage.

1 Like