iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Odoo

30天就算 0 基礎,也能使用 GenAI 創造簡單的 Odoo 模組應用系列 第 21

【Day21】Odoo 電商權限設置範例:安全群組 (XML)、存取規則 (CSV)

  • 分享至 

  • xImage
  •  

CSV 文件定義了具體的模型存取規則,XML 文件則定義了不同的使用者群組,用來管理存取控制和安全性設置的核心元件。讓我們更詳細地探討它們的關係及其與模型的互動。

文章結構

  • Python 模型定義 (models.py)
  • CSV 存取規則 (security/ir.model.access.csv)
  • XML 定義安全群組 (security/security.xml)
  • 最後用 Manifest (manifest.py) 做小結

Python 模型定義 (models.py)

我們首先定義一個簡單的模型,例如一個 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 存取規則 (security/ir.model.access.csv)

在 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 文件的主要欄位如下:

  • id: 存取規則的唯一標識符。
  • name: 存取規則的名稱,通常表明這條規則的作用。
  • model_id
  • : 權限適用的模型。這裡的模型 ID 是模型的 XML 外部 ID,例如 model_custom_product。
  • group_id
  • : 使用這條存取規則的群組。這裡的群組 ID 來自 XML 定義的群組,如 group_product_manager。
  • perm_read: 是否允許讀取記錄(1=允許, 0=不允許)。
  • perm_write: 是否允許修改記錄(1=允許, 0=不允許)。
  • perm_create: 是否允許創建記錄(1=允許, 0=不允許)。
  • perm_unlink: 是否允許刪除記錄(1=允許, 0=不允許)。

XML 定義安全群組 (security/security.xml)

接下來,通過 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 (manifest.py) 做小結

最後,在模組的 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,
}
  • Model (models.py): 定義了一個商品模型,表示商品的基本信息。
  • Access Rule (CSV): 定義了對該模型的存取權限,控制不同群組的權限範圍。
  • Security Group (XML): 定義了兩個群組(管理者和使用者),並與存取權限一起使用來限制不同角色的操作能力。

這樣的設計能夠靈活管理不同角色的權限,使得 Odoo 能夠滿足各種業務需求,尤其是在 ERP 或電商系統中,角色權限管理至關重要。


上一篇
【Day20】CSV 檔案 (Excel) 在 Odoo ERP 中的應用:批量數據管理的高效工具
下一篇
【Day22】Odoo 電商產品模型,配合 Form View 來創建產品資料
系列文
30天就算 0 基礎,也能使用 GenAI 創造簡單的 Odoo 模組應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言