Odoo字段访问控制的完整操作方法
在Odoo中实现精准的字段访问控制,需结合模型安全规则、记录规则与字段属性三层机制。本文说明如何配置安全组授权、定义域条件过滤数据行,以及设置groups与readonly参数,协助开发者完成权限隔离。
Odoo字段权限控制的三层架构
Odoo的权限体系采用递进式设计。底层通过模型安全规则划定操作范围,中层利用记录规则按业务逻辑筛选数据行,顶层依托字段属性直接干预界面展示。掌握这三层结构的配合方式,即可应对绝大多数数据安全需求。
第1步:配置模型级基础权限(ACL)
目的:决定指定用户组能否对特定模型执行读取、写入或删除等基础操作,此为控制字段访问的前提。
入口:模块目录下的 security/ir.model.access.csv 或 security/security.xml。
动作:新增访问控制列表记录。以XML为例,需在模块清单文件中声明并加载:
<record id="model_your_model_access" model="ir.model.access">
<field name="name">your.model.access</field>
<field name="model_id" ref="model_your_model"/>
<field name="group_id" ref="your_module.group_your_group"/>
<field name="perm_read">1</field>
<field name="perm_create">0</field>
<field name="perm_write">1</field>
<field name="perm_unlink">0</field>
</record>
重要参数:id 为唯一标识;model_id 绑定目标模型;group_id 限定生效的安全组;perm_read/write/create/unlink 分别控制读写删权限开关。完成状态:重启服务并更新模块后,进入 技术 → 安全 → 访问控制列表 面板,确认已生成对应条目且无报错。
第2步:设定记录级数据过滤(Record Rule)
目的:在基础权限之上,进一步限制用户组仅能查看或操作满足特定条件的数据记录,从而间接保护敏感字段。
入口:模块目录下的 security/ir.rules.xml。
动作:编写域表达式规则:
<record id="your_model_rule" model="ir.rule">
<field name="name">Your Model Rule</field>
<field name="model_id" ref="model_your_model"/>
<field name="domain_force">[('state', '=', 'draft')]</field>
<field name="groups" eval="[(4, ref('your_module.group_your_group'))]"/>
</record>
重要参数:domain_force 填入标准域列表,用于拦截不符合条件的记录;groups 绑定受影响的用户组。完成状态:该成员登录后刷新表单,被规则过滤掉的单据将不再出现在列表中,自然无法触发后续的字段的修改操作。
第3步:通过字段属性直接限制可见与编辑
目的:在视图层面对特定字段进行精细管控,明确哪些用户可见、哪些用户可编辑。
入口:模型定义文件(通常为 models.py 或对应 .py 文件)。
动作:在字段声明时附加控制属性:
from odoo import models, fields
class YourModel(models.Model):
_name = 'your.model'
_description = 'Your Model Description'
name = fields.Char(string='Name')
sensitive_info = fields.Char(
string='Sensitive Info',
groups='your_module.group_your_group',
readonly=True
)
重要参数:groups 接受逗号分隔的XML ID列表,仅列出的用户组可在界面渲染该字段;readonly=True 强制字段为只读状态。完成状态:保存代码后重载应用,在不同权限账号下打开表单,高权限组可见并可编辑(若readonly未设),低权限组字段将被自动隐藏或置灰。
常见排错与注意事项
- 权限不生效:检查是否遗漏了模块更新操作,或用户所属安全组未在 设置 → 用户 & 公司 → 用户 界面正确分配。
- 记录规则冲突:当多条
ir.rule作用于同一模型时,系统默认取交集。若导致数据无法显示,请排查domain_force是否定义过严。 - 字段隐藏但可通过外部接口访问:
groups仅控制前端UI展示。若需彻底阻断后端读写,需配合收回模型的perm_write权限,或在ORM方法内追加二次校验逻辑。
总结
Odoo字段访问控制的核心在于“模型定门槛、记录做筛选、属性管展示”。通过合理组合安全组划分、域条件过滤与字段内置属性,可实现企业级的数据分级管理。以上就是Odoo字段访问控制的详细内容,更多关于Odoo后台权限配置与开发的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













