[Zope-CMF] Extending FTI.isConstructionAllowed

yuppie y.2009 at wcm-solutions.de
Fri May 29 11:04:02 EDT 2009


Wichert Akkerman wrote:
> Previously yuppie wrote:
>> Wichert Akkerman wrote:
>>> I have a use case where I need to put additional restrictions on object 
>>> creation, in particular I need to restrict the maximum depth of items 
>>> inside of a container of a specific type. The ideal place to put such a 
>>> restriction seems to be the isConstructionAllowed method on the FTI. 
>>> Currently this method is not very extensible, which leads to complicated 
>>> code in various FTI types.
>>>
>>> I am considering to add an extension point here, something like this:
>>>
>>> class ITypeConstructionFilter(Interface):
>>>      def __init__(fti, container):
>>>          """Adapt on the FTI of the object being created and the target 
>>> container"""
>>>
>>>      def allowed():
>>>          """Check if construction is allowed."""
>>>
>>>
>>> current checks such as the workflow check that was added in CMF 2.2, or 
>>> the type constraint logic Plone has in ATContentTypes could be moved to 
>>> such an adapter. The standard isConstructionAllowed method could then 
>>> query all registered adapters to check if construction should be possible.
>>>
>>> Does this sound sensible?
>> Question: zope.container.constraints handles this in a different way, 
>> using a precondition defined in the interface. Did you have a look at 
>> that code? If we switch to that pattern, we could use different 
>> preconditions for containers with different interfaces. Would that be 
>> sufficient for your use case?
> 
> I don't think that is sufficient since it does not provide an extension
> point you can hook into

It's no hook for adding restrictions, but it's a hook for using 
different implementations.

> and does not support portal types.

Do you mean "does not support per portal type hooks" or do you mean 
"does not support filtering based on portal type name"?

A CMF specific precondition would look up type restrictions in the fti 
of the container.

checkFactory and checkObject are quite similar to isConstructionAllowed. 
I think we should reimplement this based on zope.container before we 
start adding new features.

Cheers, Yuppie



More information about the Zope-CMF mailing list