使用plone 4。
我上次使用过5年前的plone,生锈了python,现在通常不认为自己是开发人员。我只是想知道我想要做的是:
问题陈述:
我正在为一个中等规模的学术组织开发一个plone网站(它没有自己的IT部门,通常不知道CMS')。该组织有一个总体领导者。该组织分为5组,由不同的用户组成。这5个小组中的每一个都有一个组长。 plone站点有内部和外部发布工作流程(我认为它是一个附加组件)。
我在我的plone网站上创建了5个组(Group1-5)以反映这种结构。我还创建了一个名为GroupLeaders的组,其中包含5个组中的5个领导者。每个用户都有一个个人文件夹。此外,每个组都有一个组文件夹。还有一个整体组织文件夹。
阅读(r)/写(w)/内部出版物(ip)/外部出版物(ep)权限:
用户文件夹:user(r w ip ep) 组文件夹:用户(r w),组长(r w ip ep) 组织文件夹:用户(r w),组长(r w ip),组织领导(r w ip ep)。
此外,集团领导人也是其集团的名义成员。最后,组织领导者属于5个组中的一个。组织领导者和组长从不是同一个人。
在固定的2年后,团队领导和组织领导的身份发生了变化。在失去领导者身份后,用户将成为该组(用户)的简单成员。
我正在尝试实施以下工作流程:
任何组中的用户都可以在其个人文件夹中创建(任何类型的)文档(立即在外部发布)。用户在组文件夹中创建的所有文档必须由相关组长批准进行内部/外部发布。但是,仅仅成为GroupLeaders的会员资格是不够的。只有第2组(例如)的GroupLeader应该能够批准/拒绝第2组成员所做的编辑。因此,我需要类似(元代码)的内容:
如果(成员属于GroupLeader&&成员属于第2组) 为成员分配批准工作流程 端
我该怎么做?
答案 0 :(得分:2)
您可以在全局和给定的上下文中将角色直接分配给
。只需围绕角色而不是群组设计工作流程。通过组成员身份,用户将在正确的上下文中拥有正确的角色。
因此,在组文件夹中,将编辑者角色分配给相应的Group
组,将审阅者角色分配给相应的GroupLeader
组。从GroupLeader
组中删除组长,并将另一个用户添加到该组后,角色会自动跟随。
答案 1 :(得分:0)
在遵循Martijn的回答后,将以下内容添加为“之前的'脚本'到转换'publish_internally'和'publish_externally':
pu=context.plone_utils
current_user_group_memberships = pu.portal_membership.getAuthenticatedMember().getGroups()
groups_with_locally_assigned_write_permission = []
# Get all local role-assignments of object:
local_roles=context.acl_users.getLocalRolesForDisplay(context)
inherited_local_roles=pu.getInheritedLocalRoles(context)
all_local_roles = local_roles + inherited_local_roles
# Of these assignments, collect groups with write-permissions:
for role in all_local_roles:
if role[2] is 'group' and 'Contributor' in role[1] or 'Editor' in role[1]:
groupname = role[0]
if groupname not in groups_with_locally_assigned_write_permission:
groups_with_locally_assigned_write_permission.append(groupname)
# Now, we compare, if the user is a member of one of these groups:
for group in groups_with_locally_assigned_write_permission:
# Is member of an assigned group:
if group in current_user_group_memberships:
return True
# Not groupmember, but in orgafolder should be able to publish internally:
#elif [CONTEXT_IS_ORGAFOLDER] and transition=='publish_internally':
# return True
# Neither of conditions applied, continue for-loop:
else:
pass
# For-loop ended and didn't bring good news:
return False
您仍然需要找到一种方法,以确定上下文是否为组织文件夹并将其插入占位符[CONTEXT_IS_ORGAFOLDER]。
我想提一下,zopyx.plone.cassandra对于理解权限的存储是一个很大的帮助。