1. 程式人生 > >Odoo 許可權控制解析及 eval 詳解

Odoo 許可權控制解析及 eval 詳解

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

建立許可權組

示例

  1. <recordid="base.group_website_publisher"model="res.groups">
  2. <fieldname="name">Display Editor Bar on Website</field>
  3. <fieldname="category_id"ref="base.module_category_website"/>
  4. </record>
  5. <recordid="base.group_website_designer"
    model="res.groups">
  6. <fieldname="name">Manage Website and qWeb view</field>
  7. <fieldname="users"eval="[(4, ref('base.user_root'))]"/>
  8. <fieldname="implied_ids"eval="[(4, ref('base.group_website_publisher'))]"/>
  9. <fieldname="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. <recordmodel="ir.ui.menu"id=" memu_id1">
  2. <fieldname="name">menu1</field>
  3. <fieldname="groups_id"eval="[(6,0,[ref('A'),ref('B')]),]"/>
  4. <fieldname="sequence">1</field>
  5. </record>

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

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

另一中寫法:

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

base.group_user 是一個通用的系統內建使用者組, Odoo系統中所有使用者預設屬於此組

記錄規則

許可權規則可用於更精細化的許可權控制,對應【設定】->【安全】->【記錄規則】的資料

  1. <recordmodel="ir.rule"id="rule1">
  2. <fieldname="name">rule1</field>
  3. <fieldname="model_id"ref="model_model1"/>
  4. <fieldname="global"eval="True"/>
  5. <fieldname="domain_force">[1,’=’,1]</field>
  6. <fieldname="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 無許可權