【问题标题】:2 Record Rules, same object, same group, different domain2 记录规则,相同对象,相同组,不同域
【发布时间】:2016-02-05 07:55:55
【问题描述】:

人类逻辑与 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>

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

【问题讨论】:

    标签: openerp openerp-7


    【解决方案1】:

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

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

    【讨论】:

    • 如果是这样,为什么在我的情况下,用户只能看到具有正确权限的任务,如果我将第二条规则放在 XML 中的第一条规则之上,那么他就能看到所有任务,但不能写任何,也不是他自己的任务?
    • 顺便说一下,在您的示例中,您确实有两个不同的组和一个全局规则。就我而言,这两条规则适用于同一个 project.group_project_user。
    【解决方案2】:

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

    如果您查看我为记录提供的 id,它们是相同的,因此第二个在读取时会覆盖第一个。 使用两个不同的 id,当然现在可以了!

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

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 2015-03-30
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      相关资源
      最近更新 更多