CSV 文件定義了具體的模型存取規則,XML 文件則定義了不同的使用者群組,用來管理存取控制和安全性設置的核心元件。讓我們更詳細地探討它們的關係及其與模型的互動。
我們首先定義一個簡單的模型,例如一個 Product 模型,包含商品名稱、價格和分類等屬性。
from odoo import models, fields
class Product(models.Model):
_name = 'custom.product'
_description = 'Custom Product'
name = fields.Char(string='Product Name', required=True)
price = fields.Float(string='Price', required=True)
category = fields.Many2one('product.category', string='Category')
在 CSV 中,我們可以定義存取權限,決定哪些使用者可以讀取、寫入、創建和刪除該模型的記錄。
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_custom_product_manager,custom_product_manager,model_custom_product,base.group_user,1,1,1,1
access_custom_product_user,custom_product_user,model_custom_product,base.group_public,1,0,0,0
id | name | model_id:id | group_id:id | perm_read | perm_write | perm_create | perm_unlink |
---|---|---|---|---|---|---|---|
access_custom_product_manager | custom_product_manager | model_custom_product | base.group_user | 1 | 1 | 1 | 1 |
access_custom_product_user | custom_product_user | model_custom_product | base.group_public | 1 | 0 | 0 | 0 |
ir.model.access.csv 文件主要是用來定義針對特定模型的存取控制規則,這些規則會根據使用者所屬的群組來決定他們能對模型進行哪些操作。這個 CSV 文件的格式非常簡單,每行代表一條存取規則。
CSV 文件的主要欄位如下:
接下來,通過 XML 定義安全群組。這些群組可以用來管理不同的角色和權限。
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data noupdate="1">
<!-- 定義產品管理群組 -->
<record id="group_product_manager" model="res.groups">
<field name="name">Product Manager</field>
<field name="category_id" ref="base.module_category_sales_management"/>
</record>
<!-- 定義產品使用者群組 -->
<record id="group_product_user" model="res.groups">
<field name="name">Product User</field>
<field name="category_id" ref="base.module_category_sales_management"/>
</record>
</data>
</odoo>
security.xml 文件是用來定義不同的使用者群組,這些群組之後可以在 CSV 文件中與存取規則結合。安全群組是 Odoo 中角色權限管理的核心,用來分類不同類型的使用者。
XML 文件的主要結構:
res.groups: 定義不同的安全群組。
category_id: 將群組歸類到不同的功能模塊,這有助於組織不同類型的群組。例如,Sales Management 類別可能包含所有與銷售相關的群組。
group_product_manager 群組代表產品管理者,它位於 Sales Management 類別中。
group_product_user 群組代表產品使用者,也同樣位於 Sales Management 類別中。
最後,在模組的 manifest.py 中,我們需要載入這些文件。
{
'name': 'Custom Product Module',
'version': '1.0',
'category': 'Sales',
'summary': 'Module for managing custom products',
'description': 'This module allows you to manage custom products with specific access rules.',
'author': 'Your Name',
'depends': ['base'],
'data': [
'security/security.xml', # 安全群組的 XML
'security/ir.model.access.csv', # 存取規則的 CSV
'views/product_view.xml', # 視圖定義(如果有的話)
],
'installable': True,
'application': True,
}
這樣的設計能夠靈活管理不同角色的權限,使得 Odoo 能夠滿足各種業務需求,尤其是在 ERP 或電商系統中,角色權限管理至關重要。