基于工作流状态的不同权限

sim*_*awk 4 permissions workflow openerp

我需要根据对象的工作流状态为对象设置不同的权限.例如,'manager group'只能在state = draft时编辑对象,但如果state = validated,'super manager group'也可以编辑它.

似乎不可能使用ir.model.access,我正在评估是否可以使用ir.rule.好像不是......

有没有official办法得到这个或我需要实现这个功能(可能通过在ir.model.access机器中添加一个条件).

odo*_*ony 5

默认情况下,这是不可能的ir.model.access,因为此权限模型的设计就像对CRUD操作的简单Unix权限一样,并且它是静态定义的,每个模型和每个组.

您可以使用这样的方法来实现ir.rule,因为它实现了基于字段值的动态每记录访问控制.通过仅在writeunlink操作上定义一组规则并基于state字段,您将能够阻止某些组修改某些状态的记录.通过使用始终为真的规则的技术,[(1,'=',1)]您可以为具有"超级访问"组的用户放松非全局规则.另见这个答案.
但是,这个选项会有重要的警告:

  • 小心不要让这些规则适用read,因为它会使记录完全消失,并且通常会对您的流程造成严重破坏
  • 当规则生效时,界面不会变为只读,如果要使字段和按钮为只读,则必须找到一种方法,attrs以依赖于用户组的方式指定此过程.另请参阅此Launchpad问题.
  • UI中的"保存"按钮不会被禁用
  • ir.rule限制情况下的标准错误报告不是很清楚,因此肯定会使用户感到困惑(注意:它正在改进7.0)

如您所见,ir.rule为此目的使用过滤器远非完美的解决方案,您首先需要为上述问题找到合适的解决方案.

最终,您可能更容易实现自己的逻辑,在ORM原语API方法中插入新机制:( fields_view_get用于根据用户组动态地只读字段)和CRUD方法(用于实际限制操作)