2016-03-29 5 views
2

Le FTI Dexterity a une option pour sélectionner une permission en tant que "AddPermission" pour un type, mais je cherche un moyen d'exiger une logique potentiellement complexe à résoudre vrai avant d'autoriser le type à ajouter à un conteneur. Dans mon exemple particulier, je n'autoriserai que X nombre de contenu dans un conteneur donné. Si je pouvais sous-classer une méthode qui était, disons, "isAddable" ou quelque chose qui serait génial, mais je ne vois pas de méthode en main qui fait cela. Peut-être que ce n'est pas possible parce que l'objet de classe n'est pas encore initié, donc il ne peut pas appeler de méthodes, mais peut-être que l'IMOA elle-même a quelque chose?Comment ajouter une condition pour ajouter un type de Dextérité?

J'ai pensé à deux autres options. Dans mon cas, étant donné que le conteneur est également un type de contenu personnalisé, je peux remplacer sa méthode allowedContentTypes. Je préfère ne pas compter sur le conteneur pour faire ce contrôle si. Une autre option consiste à remplacer la méthode addable_types dans plone.app.content.browser.folderfactories.FolderFactoriesView. Est-ce qu'il y a une meilleure approche?

C'est à 4.3

Plone

Répondre

2

Malheureusement, il n'y a pas une telle chose comme "addable_expression" dans la FTI. Je pense que l'écrasement de FolderFactoriesView ne fera pas l'affaire - les utilisateurs intelligents peuvent toujours appeler ${folder_url}/++add++your.type.

Une implémentation personnalisée de allowedContentTypes pour votre type de dossier semble être une bonne solution pour moi. Une autre option consisterait à ajouter un gestionnaire d'événements (même si l'événement conviendrait - peut-être que zope.lifecycleevent.IObjectCreatedEvent est très bien) qui déclencherait une erreur si votre condition n'est pas remplie.

(les utilisateurs verront toujours le menu "add/yourtype" mais obtiendront une erreur - donc cela devrait être combiné avec le FolderFactoriesView personnalisé)

+0

l'explication sur la sécurité est correcte, mais si vous voulez toujours avoir seulement une limitation visuelle de l'interface utilisateur types (les utilisateurs ne verront pas le type d'ajout, mais ils peuvent toujours écrire manuellement ajouter une URL), vous pouvez utiliser https://github.com/keul/collective.factorymenu (il n'est pas encore publié en raison de problèmes avec les tests, mais devrait fonctionner sur Plone 4.3 et 5) –

+0

J'ai fini par corriger la vue des usines de dossiers ET en faisant également un écouteur d'événement pour zope.lifecycleevent.interfaces.IObjectAddedEvent. La modification de allowedContentTypes sur le conteneur parent a malheureusement le même problème de sécurité que la simple modification de la vue des usines. – Esoth

+0

merci pour les commentaires détaillés. bon d'entendre votre problème est résolu ;-) – fRiSi