我想将 Plone 站点根目录中的视图限制为仅登录成员。
我应该检查哪个权限?
为了澄清起见,我想将此权限用作 Zope 3 视图配置,并拥有默认工作的东西。如果可以避免这种情况,我不想自己创建和分配权限。
没有“经过身份验证”的权限,所有权限都仅针对特定操作,如果经过身份验证的用户需要能够执行该操作,那么您应该将相应的权限分配给“经过身份验证”的角色。
要获得“Authenticated”角色的(Zope2 基于字符串的)权限的快速列表,请使用以下 ZMI 视图:
http://localhost:8080/Plone/manage_roleForm?role_to_manage=Authenticated
我假设您在端口 8080 上运行您的站点,并且您命名了 Plone object Plone
。它在多选列表中显示所有权限,当前分配的权限已激活。
在默认站点上,此列表非常少,只有Set own password
和Set own properties
已Use external editor
分配。对于前两个,Zope3 等效项在 Products.CMFCore 中定义;它们是cmf.SetOwnPassword
, 和cmf.SetOwnProperties
; 第三个目前没有 Zope3 等价物,但很容易定义,只需将其添加到某处的 ZCML 文件中:
<permission
id="plone.UseExternalEditor"
title="Use external editor"
/>
Zope3 权限只是使用有效 python id 的 Zope2 对应项的别名。
我真的不知道你想对你的视图做什么,但你最好的选择是找到一个适当的权限并将其分配给“已验证”角色,或者创建一个新权限。
实际上,后者真的很容易。
假设我想创建一个“访问 foo bar”权限,我只需在 ZCML 文件中使用 Zope3 标识符直接注册它:
<permission
id="foobar.AccessFooBar"
title="Access foo bar"
/>
这里的所有都是它的; “Access foo bar”权限现在将在 ZMI 中可见。
如果您想默认将此权限授予特定角色,请将它们列为包含元素:
<permission
id="foobar.AccessFooBar"
title="Access foo bar">
<role name="Authenticated" />
</permission>
这仅适用于“全局”角色(在 Zope 根中定义),例如“经理”、“匿名”和“已验证”。
或者,使用 rolemap.xml 文件将其列在 GenericSetup 配置文件中,以将此新权限分配给 Authenticated 角色:
<?xml version="1.0"?>
<rolemap>
<permissions>
<permission name="Access foo bar" acquire="False">
<role name="Authenticated"/>
</permission>
</permissions>
</rolemap>
仅当您要分配在 Plone 级别定义的权限时才需要使用后者,例如“站点管理员”或“编辑器”。
在股票 Plone 中,经过身份验证但不是匿名的用户可以更改自己的密码。您可以使用该权限。它被称为:
cmf.SetOwnPassword