Quy tắc bảo mật cho các hoạt động của quy trình

Mục tiêu chính của việc hỗ trợ các quy tắc truy vấn trong Pipeline là đáp ứng các chức năng lọc của Rules engine hiện có. Mặc dù truy vấn Pipeline cung cấp một bộ tính năng phong phú, nhưng Rules engine chỉ được phép nhận dạng các bộ lọc đơn giản để đảm bảo khả năng đáp ứng và tính bảo mật của truy vấn.

Biểu thức bộ lọc được hỗ trợ

Để truy vấn bị ràng buộc theo các quy tắc của bạn, truy vấn đó phải sử dụng các toán tử so sánh tiêu chuẩn với các hằng số. Công cụ Quy tắc nhận dạng các loại bộ lọc sau:

  • Bằng và không bằng: eq, neq.
  • Thông tin so sánh: gt, gte, lt, lte.
  • Hội viên: in, arrayContains.

Dưới đây là một số ví dụ:

  • where(eq("foo", 2))
  • where(lt("foo", 2))
  • documents("/user/1", "/user/2").where(...)

Thuộc tính yêu cầu

Bạn có thể tiếp tục sử dụng đối tượng request để xác thực và truy vấn bối cảnh, mặc dù một số thuộc tính có trong các truy vấn chuẩn không được hỗ trợ trong quy trình.

Thuộc tính được hỗ trợ

Công cụ mới vẫn hỗ trợ các thuộc tính sau:

  • request.auth: Truy cập vào dữ liệu mã thông báo và uid của người dùng.
  • request.method: Xác định thao tác (Ví dụ: get, list).
  • request.path: Đường dẫn của tài nguyên đang được truy cập.
  • request.time: Dấu thời gian phía máy chủ của yêu cầu.

Thuộc tính không được hỗ trợ

Các thuộc tính request.query như limit, offsetorderBy không được hỗ trợ cho các quy tắc kiểm tra Quy trình do độ phức tạp của việc xác định các giá trị này trong các truy vấn nhiều giai đoạn.

Xử lý giai đoạn của quy trình và các quyền

Có nhiều giai đoạn trong quy trình tương ứng với các thao tác chi tiết cụ thể trong quy tắc bảo mật:

  • Quyền allow list: Được kích hoạt bởi các giai đoạn collection(), collectionGroup()database().
  • Quyền allow get: Được kích hoạt bởi giai đoạn documents(), được xử lý tương tự như thao tác get theo lô.
  • Các giai đoạn sửa đổi trường: Các quy tắc chỉ hoạt động trên dữ liệu được lưu trữ chứ không phải các giá trị phái sinh. Nếu một quy trình bao gồm các giai đoạn sửa đổi trường (Ví dụ: AddFields, ReplaceWith, Select), thì công cụ Quy tắc sẽ ngừng áp dụng các điều kiện ràng buộc của bộ lọc sau khi gặp phải giai đoạn đó.
  • Giai đoạn chữ cố định: Giai đoạn literals() không đọc từ cơ sở dữ liệu nhưng có thể phát sinh chi phí. Để ngăn chặn hành vi sai trái, bạn phải kết hợp quy tắc này với một giai đoạn khác (chẳng hạn như collection()) mà các quy tắc có thể xác minh.