Odoo 權限控制解析及 eval 詳解

來自:http://www.oejia.net/blog/2016/02/21/odoo_right_ctrl.html


創建權限組

示例

  1. <record id="base.group_website_publisher" model="res.groups">
  2. <field name="name">Display Editor Bar on Website</field>
  3. <field name="category_id" ref="base.module_category_website"/>
  4. </record>
  5. <record id="base.group_website_designer" model="res.groups">
  6. <field name="name">Manage Website and qWeb view</field>
  7. <field name="users" eval="[(4, ref('base.user_root'))]"/>
  8. <field name="implied_ids" eval="[(4, ref('base.group_website_publisher'))]"/>
  9. <field name="category_id" ref="base.module_category_website"/>
  10. </record>

以上截選自 odoo website 模塊源碼,創建了兩個組

name 組的描述名稱
category_id 指定此組屬於哪個應用程序(模塊)
users 指定了組裏面的用戶,這裏表示把admin用戶添加到該組

eval 解析
(4,ID)添加主從鏈接關係到id=ID的對象。

(3,ID)去除和id=ID的對象主從鏈接關係,但是不刪除這個對象

(2,ID) 去除和id=ID的對象主從鏈接關係,並且刪除這個對象(調用unlink方法)

(5) 去除所有的鏈接關係,也就是循環所有的從數據且調用(3,ID)

(6,0,[IDs]) 用IDs裏面的記錄替換原來鏈接的記錄,即先執行(5)再循環IDs執行(4,ID)

組和菜單

  1. <record model="ir.ui.menu" id=" memu_id1">
  2. <field name="name" >menu1</field>
  3. <field name="groups_id" eval="[(6,0,[ref('A'),ref('B')]),]"/>
  4. <field name="sequence">1</field>
  5. </record>

name 菜單名稱
groups_id 哪些組可以訪問該菜單

以上內容表示A組與B組的成員都可以訪問menu1菜單

另一中寫法:

  1. <menuitem id="menu_id1 " name="menu1" parent="menu_p" sequence="1" groups="A,B "/>

base.group_user 是一個通用的系統內置用戶組, Odoo系統中所有用戶默認屬於此組

記錄規則

權限規則可用於更精細化的權限控制,對應【設置】->【安全】->【記錄規則】的數據

  1. <record model="ir.rule" id="rule1">
  2. <field name="name">rule1</field>
  3. <field name="model_id" ref="model_model1"/>
  4. <field name="global" eval="True"/>
  5. <field name="domain_force">[1,’=’,1]</field>
  6. <field name="groups" eval="[(4,ref('A'))]"/>
  7. </record>

name 規則名稱
model_id 對應的模型
global 是否是全局
domain_force 過濾條件
groups 屬於哪個組

以上表示A組的成員就可以獲取model_model1的所有數據,可以看出domain_force是控制的關鍵

訪問控制列表(組和權限映射表)

另一種表達權限規則的方式是編寫 ir.model.access.csv 文件
對應【設置】->【安全】->【訪問控制列表】的數據
示例:

id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
access_xxx xxxxx model_website_menu base.group_website_designer 1 1 1 1

model_id:id 對應的對象模型,
寫法示例:website.model_website_config_settings
如果內容本身在website模塊中則可以省略website.
後面則爲模型的name將”.”替換成”-“的結果,在前面加model_

group_id:id 哪個組
perm_readperm_writeperm_createperm_unlink 增刪改查權限。1 有權限 0 無權限


發佈了245 篇原創文章 · 獲贊 357 · 訪問量 268萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章