我有一個Plone網站並創建一個菜單項。用戶只編輯自己的帖子。使用Plone permisisons
在共享選項卡中,我添加了可發佈主題的每個用戶。
如何防止user1編輯user2擁有的帖子?目前user1可以編輯user2帖子。
此前我嘗試創建一個組,將每個用戶分配到該組並使用共享選項卡添加該組,但通過這種方式,一個用戶可以編輯來自另一個用戶的帖子。
我有一個Plone網站並創建一個菜單項。用戶只編輯自己的帖子。使用Plone permisisons
在共享選項卡中,我添加了可發佈主題的每個用戶。
如何防止user1編輯user2擁有的帖子?目前user1可以編輯user2帖子。
此前我嘗試創建一個組,將每個用戶分配到該組並使用共享選項卡添加該組,但通過這種方式,一個用戶可以編輯來自另一個用戶的帖子。
只需減去(取消選中)共享選項卡的「Can edit」權限即可。 項目的創建者默認也是所有者,所有者擁有編輯權限,因此用戶可以編輯自己的項目,但不能編輯其他項目。
更新(根據新評論):
禁止在子文件夾附加特權,你需要打破貢獻者角色的傳承,到了「能add'許可權被分配給。
但是,這似乎還不可能。引用Martin Aspeli的文章「瞭解權限和角色」:
「當前(很可能是Plone 2.1之前),本地角色可以添加到獲取樹的較低級別,但不會被帶走」。
因此,您需要尋找另一種方法,正如Martijn已經建議的那樣,您很可能希望爲您的 - 定義爲文件夾 - contenttype以及應允許添加的所有類型定製工作流程(幸運的是,默認情況下,圖像和文件會繼承其父級的狀態,否則您可能不得不考慮多鏈式工作流程,但即使或者醜陋,這也值得一篇新文章 - 僅創建contenttypes副本,以便爲他們提供另一個工作流程)。
在這種情況下,操作步驟如下:
創建工作流程中http://developer.plone.org/content/workflow.html勸(我最近更新的話,請讓我們知道,如果你有改進建議或幫助自己)。
向您的工作流添加'添加門戶內容'權限(在ZMI中點擊您的工作流名稱並點擊權限標籤,從下拉菜單中選擇它)。
對於工作流程中的每個狀態(單擊州名稱),取消選中「Aquire權限設置」,這樣就可以打破Contibutors角色的繼承。然後檢查你想授予它的每個角色的'添加門戶內容'權限,這對你的情況至少是所有者角色,你也可以管理員能夠訪問所有內容。
UPDATE2:
另一個更有挑戰性,但恕我直言好多了,方法可以是:
在您的contentType的inititialization(=您克拉的類被稱爲)觸發腳本(FE與一個contentrule/eventhandler /訂閱者或者你的ct的類定義本身),它查找父對象的繼承的共享權限,阻止它們(__ac_local_roles_block__ = True
)並重新分配所有角色,但是貢獻者的一個對於新出生的對象(你的文件夾內容類型)。 這將避免創建一個全新的工作流程來解決這種情況。
要做到這一點,請閱讀文檔(剛剛更新,評論隨時歡迎),看到一個事件處理程序是如何註冊資格:
的執行Python的腳本可以包含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
被激發四次(爲什麼?)我是不是能夠很快馴服這一點,但plone.app.contentrules.handlers.py
,確實:)有它仔細看看,也許包括在解決方案中contentrule可以更好。
對於深入代碼示例有關角色,看到的Andreas Jung的可愛zopyx.plone.cassandra及其computeRoleMap.py。
我沒有看過collective.subtractiveworkflow,但。如果你這樣做,請告訴我們關於它:)
如果您只想讓用戶編輯自己的內容,則需要將編輯限制爲Owner
角色。
它是如何做到的?編碼或zope管理界面?或Plone管理界面? – 2013-05-02 15:37:34
@AngeloRigo:管理物品的工作流程。這可以通過ZMI完成(查找'portal_workflow'工具),儘管有點麻煩。 – 2013-05-02 15:39:30
它是如何完成的?我在portal_workflow部分輸入,但沒有找到它可以完成的地方 – 2013-05-02 18:32:25
謝謝艾達它正在工作,現在用戶1不編輯用戶2的內容,但如果用戶2輸入在用戶1職位,他可以添加像頁面,文件,圖像的內容,我怎麼能阻止他添加任何類型到另一個用戶職位?。我從一個靈巧類型創建一個菜單項,並指定只能添加文件夾類型,所以一旦創建了一個文件夾,並且用戶在文件夾內步進,他可以添加其他類型(文件圖像,頁面) – 2013-05-03 14:36:41
已更新的答案,請相應地更新您的問題。 – 2013-05-06 05:29:24
嗨Ida,我是新來的plone,很久以前就使用zope,我想知道更多關於觸發我的contenttype初始化的腳本。它是如何完成的?謝謝你的慷慨 – 2013-05-07 19:55:04