我需要根据对象的工作流程状态对对象设置不同的权限。例如,“经理组”仅在状态=草稿时才可以编辑对象,但“超级经理组”在状态=已验证时也可以编辑对象。
似乎不可能使用ir.model.access
我正在评估是否可以使用ir.rule
。看来不是...
有没有official
获得此功能的方法还是我需要实现此功能(也许通过在 ir.model.access 机制中添加条件)。
默认情况下这是不可能的ir.model.access
,因为此权限模型的设计类似于 CRUD 操作上的简单 Unix 权限,并且它是按模型和按组静态定义的。
您也许可以使用以下方法来实现类似的东西ir.rule
,因为它实现了基于字段值的动态每记录访问控制。通过仅定义一组规则write
and unlink
操作并基于state
字段,您将能够阻止某些组修改某些状态下的记录。通过使用永远正确的规则技术[(1,'=',1)]
然后,您可以放宽对拥有“超级访问权限”组的用户的非全局规则。另请参阅此answer.
但是,此选项有重要的警告:
- 小心不要让这些规则适用
read
,因为它会使记录完全消失,并且通常会对您的流程造成严重破坏
- 当规则生效时,界面不会变成只读,如果你想让字段和按钮只读,你必须找到一种方法来指定它
attrs
以取决于用户组的方式。另请参阅此启动板问题.
- UI 中的“保存”按钮不会被禁用
- 在以下情况下的标准错误报告
ir.rule
限制不是很明确,所以肯定会让用户感到困惑(注:7.0 正在改进)
如您所见,使用ir.rule
用于此目的的过滤器远非完美的解决方案,您首先需要为上述问题找到适当的解决方案。
最终,您可能会更轻松地为此实现自己的逻辑,在 ORM 原始 API 方法中插入新机制:fields_view_get
(用于根据用户组使字段动态只读)和 CRUD 方法(用于实际限制操作)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)