基于工作流的状态不同的权限(different permissions based on workf

2019-06-25 10:55发布

我需要设置不同的权限基于其工作流状态的对象上。 举例来说,“经理小组”可编辑对象仅当状态=草案,但“超级经理小组”也对其进行编辑,如果状态=验证。

看来,使用是不可能ir.model.access ,我估计,如果它可以使用来完成ir.rule 。 这似乎不...

有没有official得到这个还是我需要实现这个功能(可能通过增加一个条件到ir.model.access机械)的方式。

Answer 1:

这是不可能在默认情况下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方法(实际上限制操作)



Answer 2:

还有另一种方式,而不是黑客Web的客户端。 你总是可以有相同的对象2次。

  1. 对于管理员组。

  2. 对于超级管理员组。

在管理员组,您可以使用的attrs = { '只读':( '!=' '状态', '草案')]}

或任意条件,你需要的。

而在超级店长组以同样的方式,你可以把他的条件字段。



Answer 3:

我有此功能工作的生产环境中,只使用记录的规则:在项目问题,“基本用户”可以创建和取消的问题,但无法打开或关闭它们。 尽管@odony提到的GUI的局限性,它完美的作品。

这些是用于记录规则:

还有需要注意的一个特殊情况:从读写状态到只读状态发生变化:

在操作的方法,如果该状况,经过其他改变write操作,用户将能够改变的国家; 但如果有一些write状态更新后的操作,用户将不能够改变状态。

在我的例子,该项目事件的方法来打开一个问题case_open() 它首先改变状态,然后做更多的变化,比如settting开放日期,用户和消息历史记录。 正因为如此,基本的用户无法打开的问题。 如果你希望他们能够做到这一点, case_open()必须重写,使其所有其他后改变状态write操作完成。



Answer 4:

我有一个类似的要求...我的要求是做一个char场(说“test_123”)只读在sale.order如果用户来到该组“销售用户”,否则为编辑组“销售经理”下。 也就是说,如果销售订单处于草案状态那么任何人都可以编辑,但它的销售订单确认后则此字段“test_123”只可编辑的“销售经理”

我所做的是我添加了一个功能领域(is_group_manager)如果用户来到团“销售经理”之下,状态不是“草稿”,否则为false返回true。 然后在XML视图我添加了字段“test_123”具有属性attrs="{'readonly':[('is_group_manager','=',0)]}"例如

<field name="is_group_manager" invisible="1"/>
<field name="test_123" attrs="{'readonly':[('is_group_manager','=',0)]}"/>

这种方法仅在OpenERP的V6.0。 也许这将是对你有帮助。 :)



文章来源: different permissions based on workflow state