我有灵巧内容类型,只有网站管理员才能编辑它。为此,我创建了一个额外的权限,并将其授予Site Admins。到我添加的类型的xml:
<property name="add_permission">my.product.EditContent</property>
这可以防止每个人创建没有适当权限的此类型。此外,我想阻止修改内容,并期望像:
<property name="edit_permission">unimr.subsite.EditTheme</property>
但这不起作用。我该如何管理?
答案 0 :(得分:1)
基于敏捷的contenttypes的Factory-Type-Information(FTI)在plone.dexterity/plone/dexterity/fti.py
中声明了一个add-permission-property,但是没有edit-permission-property。
如果您只是要求,要向管理员授予添加权限并且不需要进一步优化,您实际上不需要定义新权限,只需立即将其授予管理员,像这样:
<property name="add_permission">cmf.ManagePortal</property>
为了仅允许对管理员进行编辑,我在您的contenttype的类声明中使用此行阻止了local-permission-assignment的继承:
class YourDexterityContenttypeClassName(dexterity.Item):
__ac_local_roles_block__ = True
但是,这也会阻止继承的View-and Review-permissions。如果您还需要单独处理这些,另一种方法是在创建contenttype时添加eventlistener,检查继承的角色并删除它的编辑角色:
from Acquisition import aq_inner
def blockEditors(obj, event):
""" Remove possibly inherited editor-role.
"""
context = aq_inner(obj)
editors = context.users_with_local_role('Editor')
# For any editor:
for editor in editors:
# Get her local-roles:
roles = list(context.get_local_roles_for_userid(editor))
# Subtract editor-role of roles:
roles.remove('Editor')
# Set roles (the old roles without editor):
context.manage_setLocalRoles(editor, roles)
# Update changes:
context.reindexObjectSecurity()
默认情况下,管理员可以编辑您的内容类型,并拥有全局修改权限。
注意:这是一个昂贵的电话,这个例子只查找用户分配,您可能需要扩展此示例,以查找已分配的组。