我正在使用贴纸来创建我的内容类型和视图.我正在使用Plone 3.3.
在我的config.py:
ADD_PERMISSIONS = {
# -*- extra stuff goes here -*-
'MyContentType': 'mynamespace.mypackage: Add My Content Type'
}
Run Code Online (Sandbox Code Playgroud)
在我的__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)
Run Code Online (Sandbox Code Playgroud)
......并且在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?"
/>
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用colective.autopermission创建自定义权限,但我已经使用config.py创建了它们,如何在configure.zcml中使用它们?
编辑:Hum,ZCML中定义的浏览器视图使用Zope 3权限ID,但我的config.py使用Zope 2权限标题.我需要使用collective.autopermission来创建zope 3权限id,或者我可以使用另一种方法(比如只title使用dict中title提供的属性创建permissions.zcml ADD_PERMISSIONS,因为zope 2样式中的权限已经创建所以我不需要collective.autopermission)?
您确实应该使用collective.autopermission并创建一个permissions.zcml(并在configure.zcml中加载,或者只在configure.zcml中添加行),其中包含如下语句:
<permission
id="mynamespace.mypackage.AddMyContentType"
title="mynamespace.mypackage: Add My Content Type"
/>
Run Code Online (Sandbox Code Playgroud)
您可以选择不同的ID,但标题必须与您在config.py中提供的标题相同.
编辑:
请注意,Plone 4.0或更高版本中使用的Zope2版本包含collective.autopermission修补程序,因此您不再需要使用该程序包; 你就还需要在过程的ZCML许可声明.
在Plone 3上你确实需要collective.autopermission包,你应该在setup.py中依赖它并<include package="collective.autopermission" />在权限注册之前添加你的zcml(或者使用包含在Plone 3.3中的z3c.autoinclude来自动加载zcml).
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |