如何声明仅为一个plone站点启用的订户?

Jih*_*sse 5 plone

在Plone实例中,我有两个plone站点.在其中一个,我有一个专门的产品.

我想在该产品中声明一个订户,Products.PluggableAuthService.interfaces.events.IPrincipalCreatedEvent只有这个plone网站才会被激活.

我试过zcml:condition="installed my.product"但它只测试是否可以导入,所以订阅者也可以访问另一个plone站点.

将第二个plone站点移动到另一个实例不是一种选择.

谢谢.

Mat*_*ias 4

在 plon 中你有 的概念Browserlayer。

由于您可以通过通用设置安装浏览器层,因此您可以在每个克隆站点上激活/停用它。

我将在订阅者中实现一个条件,该条件检查已安装的浏览器层。

注意:Browserlayers 应用在REQUEST带有 before traverse 钩子上。

订阅者的示例函数:

from my.package.interfaces import IMyPackageLayer


def my_function(obj, event):
    if IMyPackageLayer.providedBy(obj.REQUEST):
        #  Do something
    else:
        #  Do nothing
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式在包中注册/创建浏览器层:

  1. 创建一个接口.py

    from zope.interface import Interface
    
    class IMyPackageLayer(Interface):
        """A layer specific to my package
        """
    
    Run Code Online (Sandbox Code Playgroud)
  2. browserlayer.xml在您的包配置文件中创建一个

    <layers>
        <layer name="my.package"
           interface="my.package.interfaces.IMyPackageLayer" />
    </layers>
    
    Run Code Online (Sandbox Code Playgroud)

browserlayer 示例取自plone.browserlayer 自述文件