Chương 4: Bảo Mật - Giới Thiệu Ngắn Gọn

In the previous chapter, we created our first table intended to store business data. In a business application such as Odoo, one of the first questions to consider is who1 can access the data. Odoo provides a security mechanism to allow access to the data for specific groups of users.

Chủ đề về bảo mật được đề cập chi tiết hơn trong Hạn chế quyền truy cập vào dữ liệu. Chương này nhằm mục đích đề cập đến yêu cầu tối thiểu cho mô-đun mới của chúng tôi.

Tệp dữ liệu (CSV)

SoOn là một hệ thống điều khiển dữ liệu cao. Mặc dù hành vi được tùy chỉnh bằng mã Python, một phần giá trị của mô-đun nằm trong dữ liệu mà nó thiết lập khi tải. Một cách để tải dữ liệu là thông qua tệp CSV. Một ví dụ là danh sách các quốc gia được tải khi cài đặt mô-đun sở.

"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 là một định danh bên ngoài. Nó có thể được sử dụng để tham chiếu đến bản ghi (mà không cần biết mã định danh trong cơ sở dữ liệu của nó).

  • country_id:id đề cập đến quốc gia bằng cách sử dụng định danh bên ngoài của nó.

  • name là tên của tiểu bang.

  • code là mã của tiểu bang.

Ba trường này được xác định trong ``res.country.state `` người mẫu.

Theo quy ước, một file nhập dữ liệu được đặt trong thư mục data của một module. Khi dữ liệu liên quan đến bảo mật, nó nằm trong thư mục bảo mật. Khi dữ liệu liên quan đến lượt xem và hành động (chúng tôi sẽ đề cập đến vấn đề này sau), nó sẽ nằm trong thư mục `` lượt xem``. Ngoài ra, tất cả các tệp này phải được khai báo trong danh sách data bên trong tệp __manifest__.py. Tệp ví dụ của chúng tôi được xác định trong tệp kê khai của mô-đun cơ sở.

Cũng lưu ý rằng nội dung của tệp dữ liệu chỉ được tải khi mô-đun được cài đặt hoặc cập nhật.

Cảnh báo

Các tệp dữ liệu được tải tuần tự theo thứ tự của chúng trong tệp __manifest__.py. Điều này có nghĩa là nếu dữ liệu A tham chiếu đến dữ liệu B, bạn phải đảm bảo rằng B được tải trước A.

Trong trường hợp các quốc gia, bạn sẽ lưu ý rằng danh sách các quốc gia đã được tải trước danh sách các quốc gia. Điều này là do các tiểu bang đề cập đến các quốc gia.

Tại sao tất cả điều này lại quan trọng đối với an ninh? Bởi vì tất cả cấu hình bảo mật của một mô hình đều được tải thông qua các tệp dữ liệu, như chúng ta sẽ thấy trong phần tiếp theo.

Quyền truy cập

Tham khảo: tài liệu liên quan đến chủ đề này có thể được tìm thấy trong Quyền truy cập.

Ghi chú

Mục tiêu: ở cuối phần này, cảnh báo sau sẽ không xuất hiện nữa:

WARNING rd-demo odoo.modules.loading: The models ['estate.property'] have no access rules...

Khi không có quyền truy cập nào được xác định trên một mô hình, SoOn sẽ xác định rằng không người dùng nào có thể truy cập dữ liệu. Nó thậm chí còn được thông báo trong nhật ký:

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

Quyền truy cập được định nghĩa là các bản ghi của mô hình ir.model.access. Mỗi quyền truy cập được liên kết với một mô hình, một nhóm (hoặc không có nhóm nào để truy cập toàn cầu) và một tập hợp các quyền: tạo, đọc, viết và hủy liên kết2. Các quyền truy cập như vậy thường được xác định trong tệp CSV có tên ir.model.access.csv.

Đây là một ví dụ cho test_model trước đây của chúng tôi:

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 là một định danh bên ngoài.

  • name là tên của ir.model.access.

  • model_id/id đề cập đến mô hình được áp dụng quyền truy cập. Cách tiêu chuẩn để chỉ mô hình là model_<model_name>, trong đó <model_name>_name của mô hình với . được thay thế bằng _ . Có vẻ cồng kềnh? Quả thực là...

  • group_id/id đề cập đến nhóm được áp dụng quyền truy cập.

  • perm_read,perm_write,perm_create,perm_unlink: đọc, viết, tạo và hủy liên kết quyền

Exercise

Thêm quyền truy cập.

Tạo tệp ir.model.access.csv trong thư mục thích hợp và xác định nó trong tệp __manifest__.py.

Cấp quyền đọc, viết, tạo và hủy liên kết cho nhóm base.group_user.

Mẹo: thông báo cảnh báo trong nhật ký cung cấp cho bạn hầu hết giải pháp ;-)

Khởi động lại máy chủ và thông báo cảnh báo sẽ biến mất!

It's now time to finally interact with the UI!

1

nghĩa là người dùng SoOn nào (hoặc nhóm người dùng)

'unlink' is the equivalent of 'delete'