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 _______________________________________________ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users