如何在browser / configure.zcml中使用config.py和__init__.py(使用paster)创建的权限获取自定义权限?

时间:2011-07-20 14:16:47

标签: plone

我正在使用贴纸来创建我的内容类型和视图。我正在使用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)?

1 个答案:

答案 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)。