2

我在 Odoo v8 中制作了一个模块。我的模块所做的一件事是向模型res.partner添加一个名为is_important的布尔字段。

您可能知道,sales 中的用户组是,权限先少,权限多: group_sale_salesmangroup_sale_salesman_all_leadsgroup_sale_manager。然后,我必须在我的模块中添加一些规则:

  • 属于 group_sale_salesman 组的用户不必看到字段is_importantTrue的合作伙伴,也不必看到来自不同州的合作伙伴。
  • 属于group_sale_salesman_all_leads组的用户 不必查看字段is_importantTrue的合作伙伴。

所以我实现了以下 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>

实施最后一条规则后,它开始起作用。但是,有没有更好的方法来实现我想要的?

谢谢!

4

1 回答 1

0

group_sale_manager 在其隐含组中有 group_sale_salesman_all_leads,因此 group_sale_manager 的成员会自动添加到 group_sale_salesman_all_leads 中,因此该规则适用于他。如果没有其他规则允许他访问这些合作伙伴,他将无法访问他们。

您可以将最后一条规则的 domain_force 替换为 [(1, '=', 1)]。我认为没有更好的办法。

于 2015-07-16T10:38:25.117 回答