除了手动管理使用自定义代码访问,Odoo提供了两种主要的数据驱动机制来管理或限制对数据的访问。
这两种机制是通过组与特定的用户实现:一个用户属于任何个数的组,和安全机制相关联的组,从而将安全机制应用与用户。
访问控制通过 ir.model.access
记录管理,定义了对整个模型的访问。
每个访问控制都有一个授予权限的模型、授予的权限和可选的组。
访问控制是可加性的,对于给定的模型,用户可以访问授予其任何组的所有权限: 如果用户属于一个允许写和另一个允许删除的组,它们既可以写也可以删除。
如果未指定任何组,则访问控制适用于所有用户,否则只适用于给定组的成员。
可用的权限创建(perm_create),搜索和阅读(perm_read),更新现有记录(perm_write)和删除现有记录(perm_unlink)
记录规则记录规则,记录必须满足被允许的操作条件(创建、读取、更新或删除)。它是在已经应用的访问控制之后按记录应用的
记录规则有:
- 它适用的模型
- 它应用的一组权限(例如如果
perm_read
设置了值,只有在阅读记录时才会检查规则) - 规则应用的一组用户组,如果没有指定组,则规则是全局的
- 用于检查给定记录是否与规则匹配(或可访问)或不(不可访问)相匹配的域。在上下文中使用两个变量对域进行评估:
user
是当前用户的记录并且time
是时间模块
全局规则和组规则(仅限于特定组的规则与应用于所有用户的组)完全不同:
- 全局规则是相减的,它们必须匹配才能成为可访问的记录
- 组规则是可加的,如果其中任何一个匹配(并且所有全局规则匹配),则记录是可访问的
这意味着,第一组规则限制访问,但任何进一步的组规则可扩展它,全局规则只能限制访问(或没有效果的时候)
警告
记录规则不适用于管理员用户
虽然应用了访问规则
字段访问版本7中的新内容。
一个ORM Field
可以有一个提供组列表(作为逗号分隔的外部标识符字符串)的groups
属性。
如果当前用户不在所列出的组中,则他将无法访问该字段:
- 受限字段会自动从请求视图中删除
- 受限字段会自动从
fields_get()
响应中删除 - 试图(显式地)读取或写入受限制字段会导致访问错误
工作流转换可以被限制到特定的组中。组外的用户不能触发转换。
ps:有翻译不当之处,欢迎留言指正。
原文地址:https://www.odoo.com/documentation/10.0/reference/security.html