Odoo 17自定义模块附件访问权限问题求助
问题分析
错误提示明确:非管理员用户没有ir.attachment模型的read权限。虽然已为自定义模型add.attachment配置全权限,但关联的ir.attachment模型权限未对普通用户开放——Odoo默认仅管理员拥有该模型的全部访问权限。
解决方案
提供两种可行方案,按需选择:
方案1:直接授予用户组ir.attachment基础权限(简单但权限范围广)
在模块的安全配置文件(如ir.model.access.csv)中添加一行权限配置,给目标用户组开放ir.attachment的读取权限:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_ir_attachment_user,ir.attachment user access,model_ir_attachment,base.group_user,1,0,0,0
- 说明:
base.group_user是默认普通用户组,若使用自定义用户组,替换为对应组ID即可;此处仅开放read权限,避免用户修改/删除所有附件。
方案2:通过记录规则限制用户仅访问关联附件(更安全)
若不想让用户看到所有附件,可通过记录规则(ir.rule)限制用户仅查看与自身add.attachment记录关联的附件。
步骤1:创建记录规则XML
在模块的XML文件中添加以下内容:
<record id="ir_attachment_add_attachment_rule" model="ir.rule"> <field name="name">Access attachments linked to add.attachment</field> <field name="model_id" ref="base.model_ir_attachment"/> <field name="domain_force">[('id', 'in', user.env['add.attachment'].search([]).mapped('attachment_ids').ids)]</field> <field name="groups" eval="[(4, ref('base.group_user'))]"/> <field name="perm_read" eval="True"/> <field name="perm_write" eval="False"/> <field name="perm_create" eval="False"/> <field name="perm_unlink" eval="False"/> </record>
- 进阶说明:若需限制用户仅查看自己创建的
add.attachment关联附件,可修改domain_force为:[('id', 'in', user.env['add.attachment'].search([('create_uid', '=', user.id)]).mapped('attachment_ids').ids)]
步骤2:补充基础读取权限
需同步在安全配置文件中添加方案1的基础读取权限配置,否则记录规则无法生效。
额外注意事项
- 若使用自定义用户组,需将配置中的
base.group_user替换为对应组ID; - 修改配置后,升级模块并刷新用户权限(路径:设置 > 用户与公司 > 用户 > 选择用户 > 动作 > 重新加载权限);
- 修正XML视图中的拼写错误:Python模型名为
add.attachment,但XML中多处写成add.ttachment(少一个t),这会导致视图无法正常加载。
内容的提问来源于stack exchange,提问作者Ing
相关产品推荐
相关产品推荐

