[Zope3-Users] container protectName
Michael Howitz
mh at gocept.com
Wed Mar 29 02:06:55 EST 2006
Am Mittwoch, den 29.03.2006, 01:56 -0500 schrieb Pete Taylor:
> Hi all (yet again ;) ),
> I ran into this issue on a project I worked on before, but I ended up
> changing the design before it became a significant issue. this time
> around, i don't see a way by it.
>
> i have a class that derives from Folder (or BTreeContainer, it doesn't
> really matter for this). in configure.zcml, i set it up as follows:
> <content class=".consumer.Consumer">
> <implements
>
> interface="zope.app.annotation.interfaces.IAttributeAnnotatable"
> />
> <require
> permission="zope.ManageContent"
> interface="zope.app.container.interfaces.IReadContainer"
> />
> <require
> permission="zope.ManageContent"
> interface="zope.app.container.interfaces.IWriteContainer"
> />
> <require
> permission="zope.ManageContent"
> interface=".interfaces.consumer.IConsumer"
> />
> <require
> permission="zope.ManageContent"
> set_schema=".interfaces.consumer.IConsumer"
> />
> </content>
>
> this doesn't work. putting in the third-down require statement breaks
[ ... ]
> I've put the traceback below...
>
> Traceback (most recent call last):
> File "bin/runzope", line 48, in ?
> run()
> File "bin/runzope", line 44, in run
> main(["-C", CONFIG_FILE] + sys.argv[1:])
> File "/opt/zope3//lib/python/zope/app/twisted/main.py", line 74, in main
> service = setup(load_options(args))
> File "/opt/zope3//lib/python/zope/app/twisted/main.py", line 139, in setup
> zope.app.appsetup.config(options.site_definition, features=features)
> File "/opt/zope3//lib/python/zope/app/appsetup/appsetup.py", line
> 110, in config
> context = xmlconfig.file(file, context=context, execute=execute)
> File "/opt/zope3//lib/python/zope/configuration/xmlconfig.py", line
> 556, in file
> context.execute_actions()
> File "/opt/zope3//lib/python/zope/configuration/config.py", line
> 606, in execute_actions
> for action in resolveConflicts(self.actions):
> File "/opt/zope3//lib/python/zope/configuration/config.py", line
> 1511, in resolveConflicts
> raise ConfigurationConflictError(conflicts)
> zope.configuration.config.ConfigurationConflictError: Conflicting
> configuration actions
> For: ('protectName', <class 'petetest.consumer.Consumer'>, '__contains__')
> File "/usr/lib/python2.4/site-packages/petetest/configure.zcml",
[ ... ]
This is because your Interface IConsumer extends the
IContainer-Interface. In Zope3 security declarations can only be done
once on a content class, but if you extend from IContainer in both
require statements (for IConsumer and IReadContainer) a permission is
declared.
Solution: Let ICustomer extend zope.interface.Interface. Because your
implementation of ICustomer extends BTreeContainer it also interhits the
implements statement for IContainer.
HTH,
mac
More information about the Zope3-users
mailing list