2011-03-10 66 views
1

有什麼辦法可以完成以下工作?Plone中的多級安全性?

我想爲Plone中的每個對象分配一個安全分類(例如'alpha','bravo','zulu')。這些分類將成爲內容類型模式的一部分。在運行時,用戶的安全證書將與該對象進行比較,並且當且僅當用戶具有對象的憑證時,該對象的所有全部纔可見。我看不出在工作流程中做到這一點的任何方式。

接受建議。謝謝!

斯坦

回答

2

你需要一個localrole適配器,可以檢查用戶的憑據(想必你已經有一些人給他們這樣的證書,如 - 超越角色的基本概念 - 他們不基地Plone的存在),並根據結果授予local_role。

參見:http://plone.org/products/plone/roadmap/208

它可能與提供__ac_local_roles()方法一樣簡單,但如果不是,borg.localrole現在是Plone的一部分,並且該鏈接應該讓您開始。

+0

嗨,對不起,我已經離開了一段時間。我已經能夠在過去成功創建一個本地角色適配器來控制視圖訪問對象,但除非我錯了,否則目錄搜索/文件夾列表仍然會顯示對象,是的? – 2011-04-07 15:04:06

1

這也是你如何使用工作流程來完成的。注意我並不是說你應該它與工作流,只是你可以;) 你需要一個(很大)數量的狀態。多大取決於安全狀態的組合(!=排列)。在n件東西中選擇m個東西的組合由以下公式給出:

n!/(m!(n-m)!), 

其中!是階乘。

例如你給你的例子有3個安全狀態alpha,bravo和zulu。這給出:

3!/(1!2!) + 3!/(2!1!) + 3!/(3!0!) = 3 + 3 + 1 = 7 

總和是將它們中的1,2或3組合在一起的組合。 所以,你走了,總共有七個州;)

過渡是一個不同的野獸。如果你確實需要能夠從任何這些組合狀態到任何其他狀態,那麼你將不得不計算排列,因爲從a到b不同於從b到a。排列是由下式給出:

n!/(n-m)! 

即對於你上面的7個狀態將具有7 /(7-2)= 7×6 = 42(!!!)轉變!。您當然可以通過每次只允許添加/刪除一個安全狀態來簡化轉換。 你走了,我希望你有這樣的樂趣閱讀,因爲我已經寫了:)

+0

最好並行使用多個工作流,而不是遭受工作流狀態的組合式爆炸。 – 2011-03-13 21:41:51

+0

是的,勞倫斯是對的! – ggozad 2011-03-14 08:57:46

2

請記住,CMFWorkflow允許一個對象有多個工作流相關聯。您可能有可能將您的方案的各個級別實施爲單獨的工作流程,然後將它們附加到您的對象中。

+1

事實上,這確實奏效,創建一個工作流程來管理單獨授權的分配,以及另一個工作流程的自動轉換,該過程由一個條件來保護,該條件檢查單獨的授予以更改爲授予權限的狀態。請參閱http://plone.org/documentation/kb/creating-workflows-in-plone – 2011-03-13 21:41:02