2记录规则,同一对象,同一组,不同域

时间:2016-02-05 07:55:55

标签: openerp openerp-7

人类逻辑与OpenERP逻辑,困难时期。

非常简单的想法:项目用户应该能够查看/阅读所有任务,但只能编辑/编写他分配的任务。

简单,在project.task上记录规则:

  • 第一条规则:[('user_id','!=',user.id)],授予阅读
  • 第二条规则:[('user_id','=',user.id)],授予RW

不,第二条规则会覆盖第一条规则。

做真正简单的事情,是我还是真的很复杂? 我错过了什么吗?

由于

编辑:为了澄清我的观点,这里是我的规则1& 2:

    <record model="ir.rule" id="project_task_user_rule">
        <field name="name">Project/task: user: read others tasks</field>
        <field name="model_id" ref="project.model_project_task"/>
        <field name="domain_force">[('user_id','not in',[user.id])]</field>
        <field name="groups" eval="[(4,ref('project.group_project_user'))]"/>
        <field eval="1" name="perm_read"/>
        <field eval="0" name="perm_write"/>
        <field eval="0" name="perm_create"/>
        <field eval="0" name="perm_unlink"/>
    </record>

    <record model="ir.rule" id="project_task_user_rule">
        <field name="name">Project/task: user: RW rights on his tasks</field>
        <field name="model_id" ref="project.model_project_task"/>
        <field name="domain_force">[('user_id','=',user.id)]</field>
        <field name="groups" eval="[(4,ref('project.group_project_user'))]"/>
        <field eval="1" name="perm_read"/>
        <field eval="1" name="perm_write"/>
        <field eval="0" name="perm_create"/>
        <field eval="0" name="perm_unlink"/>
    </record>

在这种情况下,用户只能看到他的任务并可以修改它们。 如果我将第二条规则放在第一条规则上,则用户可以查看所有任务,但无法编辑任何任务,也不能编辑自己的任务。

2 个答案:

答案 0 :(得分:0)

不,他们不会互相覆盖,他们是累积的: 访问规则引擎会在任何可用规则中查找要执行的操作(readcreatewriteunlink)的肯定权限。

在OCA模块project_baseuser中使用相同的方法来限制帮助台最终用户仅对草稿/新任务具有写访问权限。一旦任务移动到开始阶段,只有项目用户可以编辑它们。请参阅:https://github.com/OCA/project/blob/29caef1cd8029e755c2c27d54541202d52b9c744/project_baseuser/security/project_security.xml#L79

答案 1 :(得分:0)

好的,在编辑我的帖子时,我发现我犯了一个巨大的初学者错误......

如果你查看我给我的记录的id,它们是相同的,因此第二次在读取时覆盖第一个。 有两个不同的ID,当然现在有效!

谢谢@Daniel Reis,不知何故让我意识到了这一点。

干杯!

相关问题