繁体   English   中英

谁能解释我在Odoo中的规则行为?

[英]Can anyone explain me the rules' behaviour in Odoo?

我一如既往地坚持使用规则,因为我还无法理解规则。

这就是我们所说的:

规则之间的相互作用

全局规则(非特定于组)是限制,不能被绕过。 局部组规则可授予其他权限,但受全局规则的限制。 第一个组规则比全局规则限制更多,但是任何其他组规则将添加更多权限。

详细的算法:1.全局规则与逻辑AND运算符组合在一起,并具有以下步骤的结果2.特定于组的规则与逻辑OR运算符组合在一起3.如果用户属于多个组,则结果来自步骤2与逻辑OR运算符组合

例如:GLOBAL_RULE_1 AND GLOBAL_RULE_2 AND(((GROUP_A_RULE_1或GROUP_A_RULE_2)或(GROUP_B_RULE_1或GROUP_B_RULE_2))

但是我总是对规则有疑问,以上文字对我来说并不正确(除非我误会了任何内容)。

现在,我有了一个简单的情况:我有一个模型,该模型的记录可由任何用户读取,但只能由与该记录属于同一公司的用户创建,编辑和删除。

因此,我需要一个全局规则(它将适用于所有人,而不仅仅是一组人)。

<record model="ir.rule" id="my_custom_rule_a">
    <field name="name">My custom rule A</field>
    <field name="model_id" ref="my_module.model_my_model"/>
    <field name="domain_force">[('company_id', '=', user.company_id.id)]</field>
    <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>

如果我仅创建此规则,则与该记录属于同一公司的用户可以读取,创建,编辑和删除它,这是可以的,但是如果该用户与该记录不属于同一公司,则他们可以甚至没有读取记录。

因此,让我们添加另一个规则以允许他们读取属于其他公司的那些记录:

<record model="ir.rule" id="my_custom_rule_b">
    <field name="name">My custom rule B</field>
    <field name="model_id" ref="my_module.model_my_model"/>
    <field name="domain_force">[('company_id', '!=', user.company_id.id)]</field>
    <field name="perm_read" eval="True"/>
    <field name="perm_write" eval="False"/>
    <field name="perm_create" eval="False"/>
    <field name="perm_unlink" eval="False"/>
</record>

当我添加此规则时,没有人甚至无法读取任何记录,用户是否属于该记录的同一公司都没有关系...所以我以这种方式修改了第二条规则:

<record model="ir.rule" id="my_custom_rule_b">
    <field name="name">My custom rule B</field>
    <field name="model_id" ref="my_module.model_my_model"/>
    <field name="domain_force">['|', ('company_id', '=', user.company_id.id), ('company_id', '!=', user.company_id.id)]</field>
    <field name="perm_read" eval="True"/>
    <field name="perm_write" eval="False"/>
    <field name="perm_create" eval="False"/>
    <field name="perm_unlink" eval="False"/>
</record>

但是现在的行为与我只添加第一个规则完全一样:属于同一公司的用户可以对记录执行任何操作,而不属于同一公司的用户甚至都无法读取记录。

有人可以帮我吗? 我在规则方面遇到了更大的问题,因此开始理解这个小问题以面对其他问题将是很棒的。

全局规则始终是AND,因为您可以在问题中复制的文档中阅读。 将根据这些规则检查每条记录。

因此,您的第一次尝试是互斥的,这就是为什么找不到记录的原因。 您第二次尝试的结果也是正确的,因为只有用户公司的记录才满足这两个记录规则。

您必须做什么才能获得理想的结果:您必须使用非全局记录规则。

一个非常简单的例子:

模型-> my.model

组员工(Odoo中的默认用户组,但您可以创建自己的用户组)的模型访问权限(ir.model.access)-> CRUD 1111(每个记录上每个人的所有权限都将受到记录规则的影响)

现在,您也需要为雇员组设置两个记录规则:

A和域[('company_id', '=', user.company_id.id)]和CRUD 1111(对用户的公司记录的一切权利)

与域[(1, '=', 1)]和CRUD 0100(读取的每个记录的权利)

就是这样。 附带说明:客户端在这种情况下的表现很差。 公司B的用户将看到公司A的记录(根据需要),起初用户似乎可以更改它们,因为显示了编辑按钮并且该按钮“起作用”,但是在保存时,将弹出访问权限警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM