我正在使用贴纸来创建我的内容类型和视图。我正在使用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)
...并在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中使用它们?
编辑:嗯,ZCML中定义的浏览器视图使用Zope 3权限ID,但我的config.py使用Zope 2权限标题。我需要使用collective.autopermission来创建zope 3权限id,或者我可以使用另一种方法(比如只使用title
属性创建permissions.zcml,使用title
中提供的ADD_PERMISSIONS
1}} dict,因为已经创建了zope 2样式的权限所以我不需要collective.autopermission)?
答案 0 :(得分:5)
你确实应该使用collective.autopermission并创建一个permissions.zcml(并在configure.zcml中加载,或者只在configure.zcml中添加行),其中包含如下语句:
<permission
id="mynamespace.mypackage.AddMyContentType"
title="mynamespace.mypackage: Add My Content Type"
/>
您可以选择不同的ID,但标题必须与您在config.py中提供的标题相同。
编辑:
请注意,Plone 4.0或更高版本中使用的Zope2版本包含collective.autopermission修补程序,因此您不再需要使用该程序包;你做当然还需要zcml中的权限声明。
在Plone 3上你确实需要collective.autopermission包,你应该在setup.py中依赖它,并在权限注册之前在你的zcml中添加<include package="collective.autopermission" />
(或者使用包含在Plone 3.3中的z3c.autoinclude ,自动加载zcml)。