【发布时间】:2015-04-29 08:37:37
【问题描述】:
我在 Odoo v8 中制作了一个模块。我的模块所做的其中一件事是向模型 res.partner 添加一个名为 is_important 的布尔字段。
您可能知道,sales 中的用户组是,先少特权,后多特权: group_sale_salesman、group_sale_salesman_all_leads、group_sale_manager。然后,我必须在我的模块中添加一些规则:
- 属于组 group_sale_salesman 的用户不必 查看字段 is_important 为 True 的合作伙伴,也 来自不同州的合作伙伴。
- 属于组 group_sale_salesman_all_leads 的用户 不必查看字段 is_important 的合作伙伴 是的。
所以我实现了以下 XML 代码:
<record model="ir.rule" id="res_partner_same_state_no_important_rule">
<field name="name">res_partner: read only no important partners from your state</field>
<field name="model_id" ref="base.model_res_partner"/>
<field name="domain_force">[('state_id.id', '=', user.state_id.id), ('is_important', '=', False)]</field>
<field name="groups" eval="[(4, ref('base.group_sale_salesman'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="False"/>
</record>
<record model="ir.rule" id="res_partner_no_important_rule">
<field name="name">res_partner: read only no important partners</field>
<field name="model_id" ref="base.model_res_partner"/>
<field name="domain_force">[('is_important', '=', False)]</field>
<field name="groups" eval="[(4, ref('base.group_sale_salesman_all_leads'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="False"/>
</record>
它似乎工作得很好,但随后,我使用属于组 group_sale_manager 的用户登录,名为 res_partner_no_important_rule 的规则正在影响它(尽管没有为该组声明规则)。
这就像该组继承了权限较少的组中限制最少的规则。这是真的?我说的对吗?
最后,我不得不添加一条废话规则来解决这个问题,并允许属于 group_sale_manager 的用户在我实施其他规则(读取、写入、创建和取消链接到真的):
<record model="ir.rule" id="res_partner_see_all">
<field name="name">res_partner: read all</field>
<field name="model_id" ref="base.model_res_partner"/>
<field name="domain_force">['|', ('is_important', '=', True), ('is_important', '=', False)]</field>
<field name="groups" eval="[(4, ref('base.group_sale_manager'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
</record>
在实施最后一条规则后,它开始起作用。但是,有没有更好的方法来实现我想要的?
谢谢!
【问题讨论】: