2016-02-05 81 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,讓我意識到這一點。

乾杯!