Переопределение безопасности для представления браузера в Plone 4 - PullRequest
4 голосов
/ 04 августа 2011

Я бы хотел переопределить безопасность для стандартного просмотра браузера folder_contents, чтобы к нему имели доступ только участники с ролью Reviewer.

Класс определен в plone.app.content.browser.foldercontents.FolderContentsView

В моем продукте custom.policy у меня есть

браузер / configure.zcml:

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser"
    i18n_domain="custom.policy">

  <browser:page
    for="*"
    class=".overrides.FolderContentsView"
    name="folder_contents"
    template="folder_contents.pt"
    permission="cmf.ReviewPortalContent" 
    />

</configure>

в браузере / overrides.py

from plone.app.content.browser.foldercontents import FolderContentsView

class ProtectedFolderContentsView(FolderContentsView):
    """ Customized FolderContentsView """

Однако, когда я запускаю экземпляр, я получаю:

zope.configuration.config.ConfigurationConflictError: Conflicting configuration actions
For: ('view', None, u'folder_contents', <InterfaceClass zope.publisher.interfaces.browser.IBrowserRequest>, <InterfaceClass zope.publisher.interfaces.browser.IDefaultBrowserLayer>)
File "src/custom.policy/custom/policy/browser/configure.zcml", line 30.2-36.6
    <browser:page
      for="*"
      class=".overrides.FolderContentsView"
      name="folder_contents"
      template="folder_contents.pt"
      permission="cmf.ReviewPortalContent"
      />
File "eggs/plone.app.content-2.0.7-py2.6.egg/plone/app/content/browser/configure.zcml", line 15.4-20.46
      <browser:page
          for="*"
          class=".foldercontents.FolderContentsView"
          name="folder_contents"
          template="folder_contents.pt"
          permission="cmf.ListFolderContents" />

Как я могу выполнить это переопределение, столкнувшись с конфликтами?

Ответы [ 3 ]

5 голосов
/ 04 августа 2011

Если это действительно пользовательская конфигурация сайта, а , а не , которую вы когда-либо построите поверх, то для этого и нужен файл overrides.zcml.Создайте файл custom / policy / overrides.zcml:

<configure xmlns="http://namespaces.zope.org/zope">
  <include package=".browser" file="overrides.zcml" />
</configure>

Затем переименуйте ваш браузер / configure.zcml в browser / overrides.zcml.

3 голосов
/ 04 августа 2011

Вы пытались указать пользовательский слой браузера?

2 голосов
/ 04 августа 2011

Зарегистрируйте его для более конкретного интерфейса. Вместо этого скажите zope.interface.Interface или Products.Archetypes.interfaces.IBaseContent.

...