iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
Odoo

用 Odoo 打造數位轉型引擎:從基礎建置到跨領域應用系列 第 14

Day 14:Odoo 權限控制與使用者角色管理

  • 分享至 

  • xImage
  •  

在企業系統中,權限控管 是不可或缺的一環。Odoo 提供了完整的權限與角色管理機制,能精準控制誰可以存取、編輯或刪除哪些資料。今天我們將介紹 Odoo 的 使用者、群組與存取控制 (Access Control),並透過範例實作。


1. Odoo 權限設計概念

Odoo 採用三層權限控制:

  1. 使用者 (Users):個別帳號,代表具體的人。
  2. 群組 (Groups):定義一組權限,使用者可隸屬於多個群組。
  3. 存取控制 (Access Rights & Record Rules):定義群組在模型上的操作範圍。

這樣的設計,讓權限控管更具彈性與可擴充性。


2. Access Control List (ACL)

ACL 決定一個群組能否對某個 Model 進行 建立 (Create)、讀取 (Read)、寫入 (Write)、刪除 (Delete) 操作。
存放在 security/ir.model.access.csv

範例 (security/ir.model.access.csv):

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_library_user,access.library.user,model_library_book,base.group_user,1,1,1,0

這段設定表示:

  • 一般使用者群組 (base.group_user)
  • library.book 模型擁有讀、寫、建立權限
  • 但沒有刪除權限

3. Record Rules

Record Rules 決定「使用者能存取哪些資料列」。
範例 (security/library_security.xml):

<odoo>
  <record id="library_book_user_rule" model="ir.rule">
    <field name="name">Library Books: User can only see own books</field>
    <field name="model_id" ref="model_library_book"/>
    <field name="groups" eval="[(4, ref('base.group_user'))]"/>
    <field name="domain_force">[('create_uid', '=', user.id)]</field>
  </record>
</odoo>

這條規則代表:

  • 一般使用者只能看到自己建立的書籍紀錄。

4. 群組與角色設計

Odoo 允許你設計不同的群組,以符合企業角色需求:

  • 管理員 (Admin):擁有完整權限。
  • 經理 (Manager):可以讀取/編輯所有資料,但不能更改系統設定。
  • 一般使用者 (User):僅能操作自己相關的資料。

群組可以在 __manifest__.py 中註冊,也能在 XML 中定義,並分配對應的權限。


5. 測試權限

建立完成後,重新啟動 Odoo 並更新模組:

./odoo-bin -c odoo.conf -d mydb -u library_module

再透過不同帳號登入系統:

  • 管理員可看到所有書籍。
  • 一般使用者只能看到自己建立的書籍。
  • 嘗試刪除紀錄時,會提示「沒有權限」。

小結

Odoo 的權限管理機制分為三層:

  • ACL:控制基本 CRUD 權限。
  • Record Rules:控制資料列層級存取。
  • 群組 (Groups):讓權限能依照角色彈性配置。

這讓 Odoo 能同時滿足中小企業到大型企業的需求,確保數據安全與職責分工。在下一篇文章中,我將帶你認識 Odoo 自動化流程(Server Actions 與 Scheduled Actions),讓系統能自動處理例行任務。


上一篇
Day 13:客製化範例:擴充 CRM 模組功能
下一篇
Day 15:Odoo 自動化流程(Server Actions 與 Scheduled Actions)
系列文
用 Odoo 打造數位轉型引擎:從基礎建置到跨領域應用16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言