2条记录规则,同对象,同组,不同域
2 Record Rules, same object, same group, different domain
人类逻辑与 OpenERP 逻辑,困难时期。
非常简单的想法:项目用户应该能够see/read所有任务,但只能edit/write他分配的任务。
简单,在 project.task 上记录规则:
- 第一条规则:[('user_id','!=',user.id)], grants Read
- 第二条规则:[('user_id','=',user.id)], grants 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>
在这种情况下,用户只能看到他的任务并且可以修改它们。
如果我将第二个规则放在第一个规则之上,用户可以看到所有任务,但不能编辑任何任务,也不能编辑他自己的任务。
不,它们不会相互覆盖,它们是累积的:
访问规则引擎在任何可用规则中查找对要完成的操作的肯定许可(read
、create
、write
、unlink
)。
OCA 模块 project_baseuser
中使用了相同的方法来限制帮助台最终用户仅对 draft/new 任务具有写入权限。一旦任务进入开始阶段,只有项目用户可以编辑它们。参见:https://github.com/OCA/project/blob/29caef1cd8029e755c2c27d54541202d52b9c744/project_baseuser/security/project_security.xml#L79
好的,在编辑我的 post 时,我发现我犯了一个巨大的初学者错误...
如果你看一下我给记录的id,它们是相同的,因此第二个在读取时会覆盖第一个。
使用两个不同的 ID,现在当然可以了!
谢谢@Daniel Reis,不知何故让我意识到了这一点。
干杯!
人类逻辑与 OpenERP 逻辑,困难时期。
非常简单的想法:项目用户应该能够see/read所有任务,但只能edit/write他分配的任务。
简单,在 project.task 上记录规则:
- 第一条规则:[('user_id','!=',user.id)], grants Read
- 第二条规则:[('user_id','=',user.id)], grants 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>
在这种情况下,用户只能看到他的任务并且可以修改它们。 如果我将第二个规则放在第一个规则之上,用户可以看到所有任务,但不能编辑任何任务,也不能编辑他自己的任务。
不,它们不会相互覆盖,它们是累积的:
访问规则引擎在任何可用规则中查找对要完成的操作的肯定许可(read
、create
、write
、unlink
)。
OCA 模块 project_baseuser
中使用了相同的方法来限制帮助台最终用户仅对 draft/new 任务具有写入权限。一旦任务进入开始阶段,只有项目用户可以编辑它们。参见:https://github.com/OCA/project/blob/29caef1cd8029e755c2c27d54541202d52b9c744/project_baseuser/security/project_security.xml#L79
好的,在编辑我的 post 时,我发现我犯了一个巨大的初学者错误...
如果你看一下我给记录的id,它们是相同的,因此第二个在读取时会覆盖第一个。 使用两个不同的 ID,现在当然可以了!
谢谢@Daniel Reis,不知何故让我意识到了这一点。
干杯!