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, offset và orderBy 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ạncollection(),collectionGroup()vàdatabase(). - Quyền
allow get: Được kích hoạt bởi giai đoạndocuments(), được xử lý tương tự như thao tácgettheo 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.