[Zope-CMF] Should object paste check FTI?
Wichert Akkerman
wichert at wiggy.net
Fri Jan 11 15:34:20 UTC 2013
On Jan 11, 2013, at 16:11 , yuppie <y.2013 at wcm-solutions.de> wrote:
> Hi!
>
>
> Wichert Akkerman wrote:
>>> PortalFolderBase overrides _verifyObjectPaste to add some extra checks
>>> on top of OFS's CopyContainer to check if content may be pasted: it
>>> copies the permission checking (why doesn't it call the base class for
>>> that?)
>
> It does call the base class *if* support for the deprecated multi-factories is not required.
>
>>> and adds code to check for allowed types. There is one check
>>> missing there that is checked when creating new object: the FTI may
>>> block creation of new content as well through
>>> its isConstructionAllowed method. Is there any reason
>>> _verifyObjectPaste check this as well? This should be simple to do:
>>>
>>> portal_type = getattr(aq_base(obj), 'portal_type', None)
>>> if portal_type:
>>> fti = queryUtility(ITypeInformation, name=portal_type)
>>> if fti is not None and not fti.isConstructionAllowed(self):
>>> raise ValueError('You can not add the copied content here.')
>>
>> The change is actually much simpler: replace the current workflow guard
>> check with a call to objType.isConstructionAllowed(self). The FTI checks
>> for workflow guards already so you won't need to duplicate that code
>> anymore either.
>
> isConstructionAllowed just returns a boolean value, _verifyObjectPaste tells you what went wrong. Maybe there should be a new method that raises errors and can be used by isConstructionAllowed and _verifyObjectPaste?
Is the ValueError currently raised by _verifyObjectPaste displayed? OFS itself uses a CopyError(MessageDialog(…)) construct, but that isn't very practical for UIs anywhere as far as I know (I'm not counting the default Zope2 error page).
Wichert.
More information about the Zope-CMF
mailing list