规则如何在 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_salesmangroup_sale_salesman_all_leadsgroup_sale_manager。然后,我必须在我的模块中添加一些规则:

属于组 group_sale_salesman 的用户不必 查看字段 is_importantTrue 的合作伙伴,也 来自不同州的合作伙伴。 属于组 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 上运行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在docker中运行odoo来配置pycharm

odoo10.0可以在windows上运行吗

odoo12官方用户文档库存

如何在windows7/10上安装odoo

odoo v8 - 字段“arch”因约束而失败:无效的视图定义

如何在windows7/10上安装odoo