第五章:安全性 - 簡介?
在 上一章節 中,我們創建了第一個用于存儲業務數據的表格。在像Odoo這樣的業務應用中,首先要考慮的一個問題是誰可以訪問數據。Odoo提供了一個安全機制,允許特定用戶組訪問數據。
更詳細的安全主題請參考 限制數據訪問 。本章旨在介紹我們新模塊所需的最低安全要求。
數據文件(CSV)?
Odoo 是一個高度數據驅動的系統。雖然行為是使用 Python 代碼定制的,但模塊的一部分價值在于加載時設置的數據。一種加載數據的方式是通過 CSV 文件。一個例子是 國家州列表
<https://github.com/odoo/odoo/blob/16.0/odoo/addons/base/data/res.country.state.csv> _,它在 ` base
模塊安裝時加載。
"id","country_id:id","name","code"
state_au_1,au,"Australian Capital Territory","ACT"
state_au_2,au,"New South Wales","NSW"
state_au_3,au,"Northern Territory","NT"
state_au_4,au,"Queensland","QLD"
...
id
是一個 外部標識符 。它可以用來引用記錄(而不需要知道其在數據庫中的標識符)。country_id:id
通過使用其 外部標識符 來引用國家。name
是狀態的名稱。code
是該州的代碼。
這三個字段在 res.country.state
模型中被 定義。
按照慣例,導入數據的文件位于模塊的 data
文件夾中。當數據與安全相關時,它位于 security
文件夾中。當數據與視圖和操作相關時(我們稍后會講到),它位于 views
文件夾中。此外,所有這些文件都必須在 __manifest__.py
文件的 data
列表中聲明。我們的示例文件在 基礎模塊清單中定義了。
還要注意的是,數據文件的內容只有在安裝或更新模塊時才會被加載。
警告
數據文件按照它們在 __manifest__.py
文件中的順序依次加載。這意味著,如果數據 A
引用了數據 B
,則必須確保在加載 A
之前先加載 B
。
在國家州的情況下,您會注意到 `國家列表<https://github.com/odoo/odoo/blob/e8697f609372cd61b045c4ee2c7f0fcfb496f58a/odoo/addons/base/__manifest__.py#L22>`__ 在 `國家州列表<https://github.com/odoo/odoo/blob/e8697f609372cd61b045c4ee2c7f0fcfb496f58a/odoo/addons/base/__manifest__.py#L29>`__ 之前被加載。這是因為州引用了國家。
為什么這對于安全很重要?因為模型的所有安全配置都是通過數據文件加載的,正如我們將在下一節中看到的那樣。
訪問權限?
參考 : 有關此主題的文檔可以在 訪問權限 中找到。
注解
目標 :本節結束后,以下警告不應再出現:
WARNING rd-demo odoo.modules.loading: The models ['estate.property'] have no access rules...
當模型上沒有定義訪問權限時,Odoo 會確定沒有用戶可以訪問數據。甚至在日志中通知此信息:
WARNING rd-demo odoo.modules.loading: The models ['estate.property'] have no access rules in module estate, consider adding some, like:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
訪問權限被定義為模型 ir.model.access
的記錄。每個訪問權限都與一個模型、一個組(或全局訪問時沒有組)和一組權限相關聯:創建、讀取、寫入和刪除2。這些訪問權限通常在名為 ir.model.access.csv
的 CSV 文件中定義。
以下是我們之前的 test.model
的示例:
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_test_model,access_test_model,model_test_model,base.group_user,1,0,0,0
id
是一個 外部標識符 。name
是ir.model.access
的名稱。model_id/id
指的是應用于訪問權限的模型。引用模型的標準方式是model_<model_name>
,其中<model_name>
是模型的_name
,并將.
替換為_
??雌饋砗苈闊??確實如此…group_id/id
指的是應用于訪問權限的組。perm_read,perm_write,perm_create,perm_unlink
: 讀取、寫入、創建和刪除權限
Exercise
添加訪問權限。
在適當的文件夾中創建 ir.model.access.csv
文件,并在 __manifest__.py
文件中定義它。
將讀取、寫入、創建和刪除權限授予組 base.group_user
。
提示:日志中的警告信息已經給出了大部分的解決方案 ;-)
重啟服務器,警告信息應該已經消失了!
現在是時候最終 與UI交互 了!