如何在Odoo中为特定组配置字段级访问权限及表单字段权限?
Odoo字段级权限配置问题解答
1. 如何在Odoo中为特定用户组分配字段级访问权限?
在Odoo里配置字段级权限有两种常用方式,分UI操作和开发配置,看你需求选:
通过用户界面(适合非开发人员,需开启开发者模式)
- 先开启开发者模式:点击右上角你的头像,选择「开发者模式」(Odoo 16+可能需要选「开发者模式(带资产)」)
- 进入「设置」模块,找到「技术 → 安全 → 字段权限」(部分旧版本叫「字段访问控制」)
- 点击「创建」按钮,填写关键信息:
- 模型:选择你要控制权限的目标业务模型(比如
res.partner客户/供应商模型) - 字段:挑选具体要限制的字段
- 用户组:指定要应用该权限的用户组
- 权限:根据需求设为「只读」「编辑」或者「隐藏」
- 模型:选择你要控制权限的目标业务模型(比如
- 保存后,这个组下的所有用户就会自动继承这个字段的权限规则
通过XML/CSV配置(适合开发场景,便于版本控制)
如果是开发人员,推荐用代码配置,方便后续部署:
- XML方式:创建字段权限记录,示例如下:
<record id="field_access_partner_phone_sales_team" model="ir.model.access"> <field name="model_id" ref="base.model_res_partner"/> <field name="field_id" ref="base.field_res_partner__phone"/> <field name="group_id" ref="sales.group_sales_person"/> <field name="perm_read" eval="True"/> <!-- 允许读取 --> <field name="perm_write" eval="False"/> <!-- 禁止编辑 --> </record>
- CSV方式:在模块的
security目录下创建ir.model.access.csv文件,格式示例:
id,name,model_id:id,field_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink field_access_partner_phone_sales_team,Phone Read-only for Sales Team,base.model_res_partner,base.field_res_partner__phone,sales.group_sales_person,1,0,0,0
2. 某表单包含5个以上字段,已在CSV安全配置中为特定组设置只读权限,但希望该组能访问该表单视图中的两个字段,该如何实现?
这个场景是模型级只读权限和字段级权限的叠加,Odoo的权限规则是「字段级权限优先级高于模型级权限」,解决思路很清晰:
- 保留原有的模型级只读配置:你之前在CSV里给该组设置的模型
perm_write:0(只读)不用动,这会让默认所有字段都只读 - 给需要编辑的两个字段单独加字段级权限:
- 如果你用UI操作:按照第一个问题的步骤,给这两个字段分别创建字段权限记录,把
perm_write设为True(允许编辑) - 如果你用CSV补充配置:在
ir.model.access.csv里新增两条记录,示例如下(假设模型是sale.order,字段是name和date_order,用户组是sales.group_sales_person):
- 如果你用UI操作:按照第一个问题的步骤,给这两个字段分别创建字段权限记录,把
id,name,model_id:id,field_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink field_access_order_name_edit_sales,Edit Order Name for Sales Team,sale.model_sale_order,sale.field_sale_order__name,sales.group_sales_person,1,1,0,0 field_access_order_date_edit_sales,Edit Order Date for Sales Team,sale.model_sale_order,sale.field_sale_order__date_order,sales.group_sales_person,1,1,0,0
- 检查视图配置:确保目标表单视图里这两个字段没有硬编码
readonly="1",如果有的话,改成动态控制(比如用attrs),或者直接删掉硬编码的只读属性,让Odoo自动根据字段权限控制编辑状态
这样配置后,该组用户打开表单时,大部分字段是只读,只有你指定的两个字段可以编辑。
内容的提问来源于stack exchange,提问作者Navi
相关产品推荐
相关产品推荐

