Odoo 許可權控制解析及 eval 詳解
來自:http://www.oejia.net/blog/2016/02/21/odoo_right_ctrl.html
建立許可權組
示例
<recordid="base.group_website_publisher"model="res.groups">
<fieldname="name">Display Editor Bar on Website</field>
<fieldname="category_id"ref="base.module_category_website"/>
</record>
<recordid="base.group_website_designer"
<fieldname="name">Manage Website and qWeb view</field>
<fieldname="users"eval="[(4, ref('base.user_root'))]"/>
<fieldname="implied_ids"eval="[(4, ref('base.group_website_publisher'))]"/>
<fieldname="category_id"ref="base.module_category_website"/>
</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)
組和選單
<recordmodel="ir.ui.menu"id=" memu_id1">
<fieldname="name">menu1</field>
<fieldname="groups_id"eval="[(6,0,[ref('A'),ref('B')]),]"/>
<fieldname="sequence">1</field>
</record>
name 選單名稱
groups_id 哪些組可以訪問該選單
以上內容表示A組與B組的成員都可以訪問menu1選單
另一中寫法:
<menuitemid="menu_id1 "name="menu1"parent="menu_p"sequence="1"groups="A,B "/>
base.group_user 是一個通用的系統內建使用者組, Odoo系統中所有使用者預設屬於此組
記錄規則
許可權規則可用於更精細化的許可權控制,對應【設定】->【安全】->【記錄規則】的資料
<recordmodel="ir.rule"id="rule1">
<fieldname="name">rule1</field>
<fieldname="model_id"ref="model_model1"/>
<fieldname="global"eval="True"/>
<fieldname="domain_force">[1,’=’,1]</field>
<fieldname="groups"eval="[(4,ref('A'))]"/>
</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_read、perm_write、perm_create、perm_unlink 增刪改查許可權。1 有許可權 0 無許可權