2011-03-10 67 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