3

请我在 Odoo 11 中需要一些自定义规则配置方面的帮助。

目前我正在做一个规则,只允许用户访问某些产品类别,因为我有一个指定这些类别的 Many2many 字段:

product_category_ids = fields.Many2many('product.category')

这是仅允许访问该类别的规则:

<record model="ir.rule" id="product_template_category_users">
    <field name="name">product.template.category.users</field>
    <field name="model_id" ref="product.model_product_template"/>
    <field name="perm_read" eval="True"/>
    <field name="perm_write" eval="True"/>
    <field name="perm_unlink" eval="True"/>
    <field name="perm_create" eval="True"/>
    <field name="domain_force">[('categ_id', 'child_of', user.product_category_ids.ids)]</field>
</record>

该规则工作正常,但我有这个问题:

  • 使用具有该规则的用户“A”登录
  • 使用用户“B”登录另一个会话并更新用户“A”,将新类别添加到类别字段
  • 与用户“A”一起返回,规则不显示添加的新类别,重新加载页面也不起作用。

当我更改当前公司或重新加载 Odoo 服务时,这些更改仅适用于“A”用户。

我认为它必须与用户在用户登录时存储数据有关,也许是更新该数据并允许规则从“用户”读取它的某种方式。我需要对用户所做的更改实时应用于连接的用户,而不必更改当前公司或重新加载 Odoo 服务。

感谢您的帮助。

4

3 回答 3

0

如果有人有同样的问题,每次我在用户的产品类别字段中进行更改时,我都会使用此功能解决它

self.env['ir.rule'].clear_cache()

该代码清除规则缓存,以便规则应用新域。

于 2018-05-09T15:39:19.963 回答
0

这很奇怪,它应该可以工作,但只有在更改当前公司或重新启动 Odoo 服务器之后。

您可以尝试在空白数据库和/或加载了演示数据的新数据库上进行修改吗?如果可能的话,最好在完全不同的服务器上进行测试,看看问题是否存在。

也许您也可以尝试force_domain像这样修改您的:

['|', ('categ_id', 'in', user.product_category_ids.ids), ('categ_id', 'child_of', user.product_category_ids.ids)]
于 2018-05-04T12:54:32.633 回答
0

添加self.env['ir.rule'].clear_cache()到模型create()write()方法中。

于 2019-08-07T17:00:34.293 回答