2016-02-05 70 views
0

人类逻辑与OpenERP逻辑,困难时期。2记录规则,相同的对象,相同的组,不同的域

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

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

  • 第1章:[( '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> 

在这种情况下,用户只能看到自己的任务,并可以对其进行修改。 如果我把第二条规则放在第一条规则上,用户可以看到所有的任务,但不能编辑任何,不属于他自己的。

回答

0

不,他们不会互相覆盖,它们是累积: 访问规则引擎查找该行动正许可的情况下完成的(readcreatewriteunlink)在任何可用的规则。

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

+0

如果是这样的话,为什么在我的情况下,用户只能看到他的任务有正确的权限,如果我把第二条规则放在XML中的第一条规则上,那么他能够看到所有的任务,但不能够写任何东西,既不是他自己的任务? – PiTyFox

+0

顺便说一句,在你的例子中,你确实有两个不同的组和全局规则。就我而言,这两条规则适用于同一个project.group_project_user。 – PiTyFox

0

好了,而我的编辑后我想通了,我犯了一个巨大的错误初学者...

如果你看一下我给我记录的ID,它们是相同的,因此第二重写第一次被阅读。 有两个不同的ID,当然可以工作!

谢谢@Daniel Reis,让我意识到这一点。

干杯!