Odoo记录规则隐式组管理:经理组权限受限的正确解决方法
Odoo 15: Manager Group Inherits Agent Group but Can't View All Properties (Record Rules Fix)
我之前做Odoo权限配置时也碰到过完全一样的问题——用implied_ids让父组继承子组后,父组会被子组的记录规则限制住,这确实有点反直觉。
问题根源
你设置的implied_ids让Manager组自动继承了Agent组的所有权限,同时也会继承Agent组绑定的记录规则。而Odoo的记录规则是累加生效的:用户所属所有组的记录规则会取交集,这就导致Manager用户只能看到符合Agent规则的记录(自己负责或无负责人的房产),而不是所有房产。
解决方案:修改记录规则的Domain
不需要删除隐含继承,只需要调整Agent组的记录规则,加入一个针对Manager用户的例外条件即可。修改后的规则会同时满足两种场景:
- 普通Agent用户:只能查看自己负责或无负责人的房产
- Manager用户:不受限制,能查看所有房产
修改后的完整XML配置如下:
<?xml version="1.0" encoding="utf-8"?> <odoo> <record id="estate_group_user" model="res.groups"> <field name="name">Agent</field> <field name="category_id" ref="base.module_category_real_estate_brokerage"/> </record> <record id="estate_group_manager" model="res.groups"> <field name="name">Manager</field> <field name="category_id" ref="base.module_category_real_estate_brokerage"/> <field name="implied_ids" eval="[(4, ref('estate_group_user'))]"/> </record> <record id="estate_user_rule" model="ir.rule"> <field name="name">Agent rule</field> <field name="model_id" ref="model_estate_property"/> <field name="perm_create" eval="False"/> <field name="perm_unlink" eval="False"/> <field name="groups" eval="[Command.link(ref('estate.estate_group_user'))]"/> <field name="domain_force">[ '|', '|', ('salesman_id','=', user.id), ('salesman_id', '=', None), user.has_group('estate.estate_group_manager') ]</field> </record> </odoo>
关键修改说明
我在原有的domain里新增了一个OR分支:user.has_group('estate.estate_group_manager')
- 当用户属于Manager组时,这个条件返回
True,整个domain的结果就是True,允许访问所有房产记录 - 当用户是普通Agent(不属于Manager组)时,这个条件返回
False,规则会退回到原来的限制逻辑,只允许查看自己负责或无负责人的房产
这样既严格遵循了教程中“Manager组隐含继承Agent组”的要求,又完美解决了Manager无法查看所有房产的问题。
内容的提问来源于stack exchange,提问作者Vincent Lagache
相关产品推荐
相关产品推荐

