Ở phần 28 ta phân biệt hai tầng quyền: Access Rights nói được làm gì trên một loại dữ liệu (bảng), còn Record Rules nói thấy những bản ghi nào trong bảng đó. Bài này đào sâu tầng thứ hai — thứ giúp làm được điều rất hay gặp: cho cả phòng vào app Bán hàng, nhưng mỗi người chỉ thấy đơn của chính mình. Cần bật Chế độ nhà phát triển trước.

Danh sách Record Rules

Vào Cài đặt → Kỹ thuật → Quy tắc truy cập. Mỗi dòng là một quy tắc lọc bản ghi:

Danh sách Quy tắc truy cập của Odoo với cột Mô hình, Nhóm, Miền và Đọc/Viết/Tạo/Xoá; nhiều quy tắc lọc theo user hoặc company

Hình 1: Danh sách Quy tắc truy cập (110 quy tắc). Các cột: Mô hình (bảng nào), Nhóm (áp cho ai), Miền (điều kiện lọc), và Đọc / Viết / Tạo / Xoá (áp cho thao tác nào). Để ý nhiều quy tắc có miền như [('create_uid', '=', user.id)] — chỉ thấy bản ghi mình tạo — hay quy tắc đa công ty lọc theo company_id.

Trái tim: Miền lọc (domain)

Mở một quy tắc ra, bạn thấy phần quan trọng nhất:

Biểu mẫu một Record Rule tên Project See my own personal stage, miền lọc user_id bằng user.id, các ô Đọc Viết Tạo Xoá được tick

Hình 2: Quy tắc "See my own personal stage". Phần Định nghĩa quy tắc (Bộ lọc miền) ghi [('user_id', '=', user.id)] — nghĩa là chỉ những bản ghi có user_id bằng chính người đang đăng nhập. Bên phải, Quyền truy cập (Đọc/Viết/Tạo/Xoá) cho biết quy tắc này áp lên thao tác nào.

Miền chính là câu điều kiện lọc. Vài mẫu hay gặp:

  • [('user_id', '=', user.id)] → chỉ bản ghi của chính mình (đơn, công việc được giao cho tôi).
  • [('create_uid', '=', user.id)] → chỉ bản ghi do mình tạo.
  • [('company_id', 'in', company_ids)] → chỉ dữ liệu của công ty mình đang chọn (dùng cho đa công ty).

Ghép với Access Rights: một nhân viên bán hàng được ghi bảng Đơn hàng (Access Rights cho phép), nhưng Record Rule user_id = user.id khiến họ chỉ thấy và sửa đơn của mình — không đụng tới đơn người khác.

Toàn cục hay theo nhóm

Để ý mục Nhóm (không có nhóm = toàn cục) trong Hình 2:

  • Quy tắc toàn cục (không gán nhóm): là hàng rào cứng, áp cho mọi người và không thể bỏ qua. Ví dụ quy tắc đa công ty — ai cũng bị giới hạn theo công ty.
  • Quy tắc theo nhóm (có gán nhóm): nới thêm quyền cho nhóm đó. Nhiều quy tắc nhóm kết hợp với nhau bằng HOẶC (OR), nhưng vẫn nằm trong giới hạn của các quy tắc toàn cục (kết hợp bằng VÀ (AND)).

Nói gọn: toàn cục siết chặt cho tất cả; theo nhóm mở thêm cho một số người — nhưng không ai vượt được hàng rào toàn cục.

Người mới nên biết tới mức nào

Thẳng thắn: hầu như bạn không cần tự viết Record Rule. Các app của Odoo đã kèm sẵn những quy tắc "chỉ thấy của mình", "chỉ thấy công ty mình". Bạn chỉ cần hiểu chúng để giải thích được vì sao một người thấy/không thấy một bản ghi.

Chỉ khi có yêu cầu đặc thù (ví dụ "trưởng nhóm thấy đơn của cả nhóm") mới nên tạo quy tắc mới — và khi đó:

  • Thử với tài khoản test, đừng sửa thẳng trên hệ thống thật.
  • Sai miền một chút là mở nhầm (thấy hết) hoặc khoá nhầm (không thấy gì) — nên kiểm rất kỹ.

Nhớ ba ý

  1. Record Rules lọc bản ghi nào được thấy, qua một miền (domain) như [('user_id','=',user.id)].
  2. Toàn cục = hàng rào cứng cho mọi người; theo nhóm = nới thêm cho nhóm đó.
  3. Access Rights (làm gì trên bảng) + Record Rules (thấy dòng nào) ghép lại mới ra quyền thật.

Xong bài này bạn hiểu trọn cơ chế phân quyền của Odoo — từ nhóm, access rights tới record rules. Phần sau ta chuyển sang công ty và chế độ đa công ty — quản nhiều công ty trong cùng một hệ thống Odoo.