我正在使用paster创建我的内容类型和视图。我用的是Plone 3.3。
在我的config.py里
ADD_PERMISSIONS = {
# -*- extra stuff goes here -*-
'MyContentType': 'mynamespace.mypackage: Add My Content Type'
}在我的__init__.py里
for atype, constructor in zip(content_types, constructors):
utils.ContentInit('%s: %s' % (config.PROJECTNAME, atype.portal_type),
content_types=(atype, ),
permission=config.ADD_PERMISSIONS[atype.portal_type],
extra_constructors=(constructor,),
).initialize(context)...and in browser/configure.zcml
<browser:page
for="*"
name="myview"
class=".myview.MyView"
template="myview.pt"
allowed_interface=".myview.IMyView"
permission="the permissions defined in ADD_PERMISSIONS: what is the name I can put here?"
/>我知道我可以使用colective.autopermission创建自定义权限,但我已经使用config.py创建了它们,如何在我的configure.zcml中使用它们?
编辑:Hum,在ZCML中定义的浏览器视图使用Zope 3权限id,但我的config.py使用Zope 2权限标题。我需要使用collective.autopermission来创建zope 3权限id,或者我可以使用另一种方法(比如创建一个带有title属性的permissions.zcml,使用ADD_PERMISSIONS dict中提供的相同的title,因为zope 2样式的权限已经创建了,所以我不需要collective.autopermission)?
发布于 2011-07-20 15:48:40
实际上,您应该使用collective.autopermission并创建一个包含如下语句的permissions.zcml (并在您的configure.zcml中加载它,或者仅仅在configure.zcml本身中添加行):
<permission
id="mynamespace.mypackage.AddMyContentType"
title="mynamespace.mypackage: Add My Content Type"
/>您可以选择不同的id,但标题必须与您在config.py中指定的标题相同。
编辑:
请注意,在plone4.0或更高版本中使用的Zope2版本包含了collective.autopermission补丁,因此您不再需要使用该包;当然,您仍然需要zcml中的权限声明。
在Plone 3上,您确实需要collective.autopermission包,并且您应该在setup.py中依赖它,并在权限注册之前在zcml中添加<include package="collective.autopermission" /> (或者使用Plone 3.3中包含的z3c.autoinclude自动加载该zcml )。
https://stackoverflow.com/questions/6763405
复制相似问题