- 本文来自Odoo 13官方文档之开发者文档系列文章
除手动通过自定义模式管理权限外,Odoo还提供了两种数据驱动的机制来管理或限制对数据的访问。
这两种机制都通过组来与具体用户相关联:一个用户可属于多个组,安全机制与组进行关联,进而应用对用户应用安全机制。
访问控制
由ir.model.access
记录进行管理, 定义对整个模型的访问。
每个访问控制有其授予权限的模型,授予的权限及可选用户组。
访问控制是附加的,对于一个给定模型用户拥有所有授予其所属组的权限,如用记属于一个允许写入的组及一个允许删除的组,那么用记就同时拥有写入和删除的权限。
如未指定组,访问控制应用于所有用户,否则它仅应用于给定组的成员。
可用的权限有创建(perm_create
)、搜索和读取 (perm_read
)、更新已有记录s (perm_write
) 及删除已有记录(perm_unlink
)
记录规则
记录规则是必须满足所允许操作(创建、读取、更新或删除)记录的条件。它在应用了访问控制后逐记录应用。
记录规则有:
- 其所应用的模型
- 一组它所应用的权限 (例如,如果设置了
perm_read
,规则仅在读取记录时进行检查) - 一组规则所应用的用户组,如未指定组则是全局规则
- 用于检查给定记录是否匹配规则(并可访问)或不匹配(不可访问)的作用域 。作用域通过两个上下文变量进行运行:
user
是当前用户的记录,time
是 time模块
全局赍是和组规则 (限制给定用记的规则 vs.应用所有用户的组) 的使用差别很大:
- 使用局规则做减法,它们必须匹配可访问的记录
- 组规则做加法,如匹配其中任一规则 (且匹配所有全局规则)则记录可进行访问
这表示第一个组规则限制访问,但其它的组规则对进行扩展,而全局规则仅限制访问 (或不起任何作用)。
⚠️警告
记录规则对管理员用户不起作用
字段权限
7.0版本中新增。
ORM 字段
可带有 groups
属性来提供一个组列表 (作为一个外部标识符的逗号分隔字符串)。
如当前用记不在所列举的组中,将无法访问该字段:
- 受限的字段自动从所请求的视图中删除
- 受限的字段从
fields_get()
响应中进行删除 - 尝试 (显式地) 从受限的字段中读取或进行写入会导致访问错误