0

使用克隆 4。

我上次使用 plone 是在 5 年前,我对 python 生疏了,现在通常不认为自己是开发人员。我只是想知道我想要做的是:

  1. 无需编码即可。
  2. 如果没有,在我到达某个地方之前,我需要阅读哪些资源。

问题陈述:

我正在为一个中型学术组织开发一个克隆站点(它没有自己的 IT 部门并且通常不知道 CMS)。该组织有一名总领导。该组织分为 5 个组,由不同的用户组成。这 5 个组中的每个组都有一个组长。plone 站点具有内部和外部发布工作流程(我认为它是一个附加组件)。

我在我的克隆网站上创建了 5 个组(Group1-5)来反映这种结构。我还创建了一个名为 GroupLeaders 的组,其中包含 5 个组的 5 个领导者。每个用户都有一个个人文件夹。此外,每个组都有一个组文件夹。还有一个整体组织文件夹。

读取 (r) / 写入 (w) / 内部发布 (ip) / 外部发布 (ep) 权限:

用户文件夹:用户(rw ip ep) 组文件夹:用户(rw),组长(rw ip ep) 组织文件夹:用户(rw),组长(rw ip),组织领导(rw ip ep)。

此外,组长也是其组的名义成员。最后,组织负责人属于 5 个组之一。组织负责人和小组负责人永远不是同一个人。

组长和组织长的身份在 2 年固定期限后发生变化。失去领导者身份后,用户将成为该组(用户)的简单成员。

我正在尝试实施以下工作流程:

任何组中的用户都可以在他们的个人文件夹(立即对外发布)中创建(任何类型的)文档。用户在组文件夹中创建的所有文档都必须由相关组长批准用于内部/外部发布。然而,仅仅加入 GroupLeaders 是不够的。只有第 2 组的 GroupLeader(比如说)应该能够批准/拒绝第 2 组的成员所做的编辑。所以,我需要类似(元代码)的东西:

if (member属于GroupLeader && member属于Group 2) 将审批工作流分配给会员端

我该怎么做呢?

4

2 回答 2

2

您可以在全局和给定上下文中直接将角色分配给组。

只需围绕角色而不是组来设计您的工作流程。通过组成员身份,用户将在正确的上下文中拥有正确的角色。

因此,在组文件夹中,将编辑角色分配给相应的Group组,将审阅者角色分配给相应的GroupLeader组。当组长从GroupLeader组中移除并且另一个用户添加到该组时,角色会自动跟随。

于 2013-10-12T07:47:09.563 回答
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 对理解权限的存储有很大帮助。

于 2013-10-14T15:07:19.887 回答