规则如何在 Odoo v8 上运行?
Posted
技术标签:
【中文标题】规则如何在 Odoo v8 上运行?【英文标题】:How rules work on Odoo v8? 【发布时间】: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>
在实施最后一条规则后,它开始起作用。但是,有没有更好的方法来实现我想要的?
谢谢!
【问题讨论】:
【参考方案1】:group_sale_manager 在其隐含组中有 group_sale_salesman_all_leads,因此 group_sale_manager 的成员会自动添加到 group_sale_salesman_all_leads 中,因此该规则适用于他。如果没有其他规则允许他访问这些合作伙伴,他将无法访问它们。
您可以将最后一条规则的 domain_force 替换为 [(1, '=', 1)]。 我认为没有更好的方法。
【讨论】:
以上是关于规则如何在 Odoo v8 上运行?的主要内容,如果未能解决你的问题,请参考以下文章