私は Plone ウェブサイトを持っていて、メニュー項目を作成しています。
共有タブで、トピックを投稿できる各ユーザーを追加します。
user1 が user2 が所有する投稿を編集できないようにするにはどうすればよいですか? 現在、user1 は user2 の投稿を編集できます。
以前はグループを作成して、各ユーザーをこのグループに割り当て、共有タブを使用してグループを追加しようとしましたが、この方法では、あるユーザーが別のユーザーからの投稿を編集します。
共有タブの「編集可能」権限を差し引く (チェックを外す) だけです。アイテムの作成者はデフォルトで所有者でもあり、所有者には編集権限があるため、ユーザーは自分のアイテムを編集できますが、他のアイテムは編集できません。
更新(新しいコメントによる):
サブフォルダーの追加権限を禁止するには、「追加可能」権限が割り当てられている寄稿者ロールの継承を解除する必要があります。
ただし、これはまだ可能ではないようです。Martin Aspeli の記事「Understanding permissions and roles」からの引用:
「現在 (おそらく Plone 2.1 まで)、ローカルロールは取得ツリーの下位レベルに追加できますが、削除することはできません」.
そのため、別のアプローチを探す必要があり、Martijn が既に提案したように、(おそらくフォルダーっぽい) コンテンツ タイプと、それに追加できるすべてのタイプ (幸いなことに、デフォルトで) のカスタム ワークフローを使用することをお勧めします。 、画像、およびファイルはその親の状態を継承します。それ以外の場合は、おそらくマルチチェーン ワークフローを考える必要がありますが、それは新しい投稿の価値があるか、または - 醜い - 別のワークフローを提供するためだけに contenttypes のコピーを作成します)。
その場合は、次のようにします。
http://developer.plone.org/content/workflow.htmlのアドバイスに従ってワークフローを作成します(最近更新しました。改善の提案がある場合、または自分で貢献する場合はお知らせください)。
「ポータル コンテンツの追加」権限をワークフローに追加します (ZMI でワークフロー名をクリックし、権限タブを押して、ドロップダウンから選択します)。
ワークフローの状態ごとに (状態の名前をクリック)、[権限設定を取得する] のチェックを外します。これにより、Contibutors ロールの継承が解除されます。次に、付与する各ロールの「ポータル コンテンツの追加」権限を確認します。これは、少なくともこの場合は所有者ロールであり、管理者もすべてにアクセスできる可能性があります。
更新 2:
もう1つの、より挑戦的ですが、IMHOの方がはるかに優れたアプローチは次のとおりです。
contenttype の初期化 (= ct のクラスが呼び出される) で、スクリプト (contentrule/eventhandler/subscriber を使用して、または ct の class-definition 自体で) をトリガーし、親で継承された共有許可を検索し、それらをブロックします ( __ac_local_roles_block__ = True
)、すべての役割を再度割り当てますが、寄稿者の役割は、新しく生まれたオブジェクト(フォルダーのようなコンテンツタイプ)用です。これにより、このケースを解決するためだけにまったく新しいワークフローを作成することを回避できます。
これを行うには、ドキュメント (更新されたばかりです。コメントはいつでも歓迎します) を読んで、イベント ハンドラーがどのように登録されるかを確認してください。
実行された python-script には s.th が含まれている可能性があります。お気に入り:
from Acquisition import aq_parent
def inhibit_parent_inherited_contributor_role(self, event):
""" Blocks local-roles on freshly created children in our
contenttype and re-assigns all its parent's local-roles but
'Contributor' to the child.
"""
# Block all inherited local-permissions, also of grand-parents:
self.__ac_local_roles_block__ = True
# Get local-roles assigned to parent and only to parent:
parent_roles = self.aq_parent.get_local_roles()
# Iterate over each assigned user and group to get their roles:
for userid, roles in parent_roles:
# Provide a list variable, to collect the new roles:
# of a group or user:
new_roles = []
# Iterate over the user's, respectively group's, roles:
for role in roles:
# Exclude 'Contributor' of new role-list:
if role != u'Contributor':
# Add all other roles to list of new roles:
new_roles.append(role)
# Finally assign new roles to the child for each found user and group:
self.manage_setLocalRoles(userid, new_roles)
免責事項:
これを でテストしましたがIObjectEditedEvent
、正常に動作します。IObjectAddedEvent
は 4 回起動されますが (なぜですか?)、私はそれをすぐに飼いならすことができませんでしたが、plone.app.contentrules.handlers.py
:) 詳しく見てみましょう。
ロールに関する詳細なコード例については、Andreas Jung の素敵な zopyx.plone.cassandra とそのcomputeRoleMap.pyを参照してください。
そして、私はまだ collective.subtractiveworkflow を見ていません。もしそうなら、それについて教えてください:)
Owner
ユーザーに自分のコンテンツを編集させたいだけの場合は、編集をロールに制限する必要があります。