2013-10-29 23 views
1

我們有一個內容類型的另一個對象內(允許調用它,MyFolder文件)可能包含在該網站註冊,除了MyFolder文件本身的任何其他內容類型。避免增加一個folderish對象相同類型

完成此操作的最簡單方法是什麼?

  1. 註冊新的工作流程並設置警衛?
  2. 刪除添加我的文件夾從創建時事件對象的內容類型的permision?
  3. 從對象中的可添加內容類型列表中篩選內容類型?怎麼樣?
  4. 以上都不是?那麼如何?

回答

0

我覺得比第3點有一些複雜性和轉換,因爲你需要撤銷Modify contrains types權限,但也許這不是預期的行爲,因爲這樣你就限制用戶修改除MyFolder之外的所有本地允許的類型,最後用戶可以找到解決此限制的解決方法...例如,MyFolder - >文件夾 - > MyFolder

點2更簡單,您只需在創建新MyFolder時撤銷一個具有事件處理程序的權限,因爲您正在撤消許可和禁止獲得該燙髮。沒有簡單的解決方法可以避免限制,用戶仍然可以使用本地允許的類型配置每種可添加內容類型但MyFolder。

1

我想3點應該可以正常工作,設置MyFolder「篩選內容類型」標誌,並選擇其他所有如果添加其他應該是可添加在MyFolder

當然「允許的內容類型」內容類型,您必須手動擴展MyFolder的「允許的內容類型」。

另一種解決方案是使用事件處理程序zope.lifecycleevent.interfaces.IObjectCreatedEvent在每個MyFolder實例上設置localallowedtypes。

在此事件處理程序中,您可以檢查父級並設置本地允許的類型。 然後,您必須確保您的「正常」用戶不能通過取消選中Modify constrain types權限來修改本地允許的類型。

但是在這裏你也必須手動管理新的內容類型。

又一解決方案: 如果您正在使用的靈巧型,有TypeSettingsAdapterhttps://github.com/plone/plone.app.dexterity/blob/master/plone/app/dexterity/browser/types.py) 您可以爲特定類型的註冊自己的適配器。