0

plone4を使用。

私が最後に plone を使用したのは 5 年前で、python に慣れていないため、最近は一般的に自分自身を開発者とは考えていません。私がやろうとしていることは次のとおりかどうか疑問に思っています。

  1. コーディングなしで可能。
  2. そうでない場合、どこかにたどり着く前に、読む必要があるリソースは何ですか。

問題の声明:

私は中規模の学術組織 (独自の IT 部門を持たず、一般的に CMS を認識していない) 向けに plone サイトを開発しています。組織には 1 人の全体的なリーダーがいます。組織は、さまざまなユーザーで構成される 5 つのグループに分かれています。これらの 5 つのグループには、それぞれグループ リーダーがいます。plone サイトには、内部および外部の公開ワークフローがあります (アドオンとして提供されたと思います)。

この構造を反映するために、plone サイトに 5 つのグループ (Group1-5) を作成しました。また、5 つのグループの 5 人のリーダーを含む GroupLeaders というグループも作成しました。各ユーザーには個人用フォルダーがあります。また、各グループにはグループフォルダがあります。全体の組織フォルダもあります。

読み取り (r) / 書き込み (w) / 内部公開 (ip) / 外部公開 (ep) 権限:

ユーザー フォルダー : ユーザー (rw ip ep) グループ フォルダー : ユーザー (rw)、グループ リーダー (rw ip ep) 組織フォルダー : ユーザー (rw)、グループ リーダー (rw ip)、組織リーダー (rw ip ep)。

さらに、グループリーダーは、グループの名目上のメンバーでもあります。最後に、組織のリーダーは 5 つのグループのいずれかに属します。組織のリーダーとグループのリーダーは決して同じ人物ではありません。

グループリーダーと組織リーダーのアイデンティティは、2年間の一定期間後に変更されます。リーダーの地位を失うと、ユーザーはそのグループの単純なメンバー (ユーザー) になります。

次のワークフローを実装しようとしています。

いずれかのグループのユーザーは、個人用フォルダー (すぐに外部に公開される) に (あらゆる種類の) ドキュメントを作成できます。ユーザーがグループ フォルダで作成したすべてのドキュメントは、関係するグループ リーダーによる内部/外部公開の承認を受ける必要があります。ただし、GroupLeaders のメンバーシップだけでは十分ではありません。グループ 2 (たとえば) の GroupLeader のみが、グループ 2 のメンバーによって行われた編集を承認/拒否できる必要があります。そのため、(メタコード) のようなものが必要です。

(メンバーが GroupLeader に属している && メンバーが Group 2 に属している) 場合、承認ワークフローをメンバー end に割り当てます。

どうすればいいですか?

4

2 に答える 2

2

ロールをグループに直接割り当てることができます。これは、グローバルでも特定のコンテキストでも可能です。

グループではなく、役割を中心にワークフローを設計するだけです。グループ メンバーシップを通じて、ユーザーは適切なコンテキストで適切なロールを持つことができます。

そのため、グループ フォルダーで、編集者の役割を対応するGroupグループに割り当て、レビュー担当者の役割を適切なGroupLeaderグループに割り当てます。グループ リーダーがGroupLeaderグループから削除され、別のユーザーがそのグループに追加されると、役割が自動的に続きます。

于 2013-10-12T07:47:09.563 に答える
0

Martijn の回答に従った後、transistions 'publish_internally' および 'publish_externally' に以下を 'Script before' として追加します。

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 に答える