我在 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为 True的合作伙伴。
所以我实现了以下 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的用户在我实施其他规则(读取、写入、创建和取消链接到 True)之前保留他们拥有的权限:
<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>
实施最后一条规则后,它开始起作用。但是,有没有更好的方法来实现我想要的?
谢谢!