Odoo字段访问控制的完整操作方法

陈默
陈默
发布时间:2026-10-12 | 3人浏览过
原创

在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后台权限配置与开发的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表