Ánh xạ ACL

Để đảm bảo rằng chỉ những người dùng có quyền truy cập vào một mục mới có thể thấy mục đó trong kết quả tìm kiếm, bạn nên lập chỉ mục các mục cùng với danh sách kiểm soát quyền truy cập (ACL) của các mục đó từ kho lưu trữ dành cho doanh nghiệp. Bạn phải mô hình hoá các ACL của kho lưu trữ của mình và bao gồm các ACL đó khi lập chỉ mục các mục trong kho lưu trữ. Trình kết nối nội dung SDK cung cấp một tập hợp phong phú các phương thức ACL đủ mạnh để lập mô hình các ACL của hầu hết các kho lưu trữ.

Tạo Danh sách kiểm soát quyền truy cập (ACL)

Tạo ACL là quy trình hai bước:

  1. Tạo một Principal bằng cách sử dụng các phương thức tĩnh trong ACL .
  2. Sử dụng Acl.Builder để tạo ACL bằng cách sử dụng giao thức chính.

Phần còn lại của tài liệu này đề cập đến một số khái niệm bạn cần biết để lập mô hình và tạo các ACL, chẳng hạn như tính kế thừa và vùng chứa.

Tạo đối tượng chính bằng mã nhận dạng bên ngoài

Google Cloud Search yêu cầu người dùng và nhóm giải quyết vấn đề với email của Google của bạn. Khi lập chỉ mục các mục trong kho lưu trữ, trình kết nối nội dung có thể không có địa chỉ email. Tuy nhiên, SDK Trình kết nối nội dung cho phép bạn sử dụng bất kỳ mã nhận dạng bên ngoài (mã nhận dạng cấp cho người dùng hoặc nhóm quyền truy cập vào các mục trong kho lưu trữ), thay vào đó của một địa chỉ email để lập chỉ mục một mục. Sử dụng getUserPrincipal() hoặc getGroupPrincpal() để tạo các khoá chính chứa mã nhận dạng bên ngoài. Có một vài chính sách khác trong ACL lớp dùng để tạo Đối tượng Principal.

Kế thừa ACL

Kế thừa ACL đề cập đến việc uỷ quyền cho một mục cụ thể và một người dùng, dựa trên kết quả kết hợp các ACL của mục và Danh sách kiểm soát quyền truy cập (ACL) của chuỗi kế thừa. Các quy tắc dùng để đưa ra quyết định ủy quyền phụ thuộc vào kho lưu trữ và các thuộc tính của mục.

Đặt kế thừa

Mỗi mục có thể có người dùng chính được phép trực tiếpngười dùng chính bị từ chối trực tiếp, được chỉ định bằng cách sử dụng setReaders()setDeniedReaders(). Được phép trực tiếp người dùng chính là người dùng được xác định trong Danh sách kiểm soát quyền truy cập (ACL) cấp cho họ quyền truy cập trực tiếp vào mục cụ thể. Người dùng chính bị từ chối trực tiếp là người dùng được xác định trong Danh sách kiểm soát quyền truy cập (ACL) không phải có quyền truy cập vào một mục cụ thể.

Một mục cũng có thể kế thừa các đối tượng gốc được phép gián tiếpngười dùng bị từ chối gián tiếp bằng cách sử dụng setInheritFrom() . Người dùng chính được phép gián tiếp là một người dùng, thông qua kế thừa ACL, có quyền truy cập gián tiếp vào một mục cụ thể. Người dùng chính bị từ chối gián tiếp là người dùng thông qua kế thừa ACL, bị từ chối truy cập vào một mục cụ thể.

Hình 1 cho thấy cách Phương thức setInheritFrom() được dùng để kế thừa các đối tượng chính được phép gián tiếp và đối tượng chính bị từ chối gián tiếp.

Bản vẽ kết nối giữa các mục
Hình 1. Phương thức setInheritFrom().

Các biện pháp kiểm soát quyền truy cập này được thể hiện trong Hình 1:

  • Người dùng 1 là người dùng chính được phép trực tiếp của mục A.
  • Người dùng 2 là người dùng chính được phép trực tiếp của mục B.
  • Mục B kế thừa Danh sách kiểm soát quyền truy cập (ACL) của mục A.

Dựa trên các chế độ kiểm soát quyền truy cập, các quy tắc truy cập sẽ bao gồm:

  • Không cần chỉ định người dùng 1 là đối tượng chính của mục B để đối tượng chính được cho phép gián tiếp của mục B; quyền truy cập được kế thừa vì Người dùng 1 được liệt kê là người chính được phép trực tiếp của mục A và mục B kế thừa Danh sách kiểm soát quyền truy cập (ACL) từ mục A.
  • Người dùng 2 không phải là người dùng chính được phép gián tiếp cho mục A.

Đặt loại kế thừa

Nếu bạn đặt tính kế thừa bằng setInheritFrom() bạn phải đặt loại kế thừa bằng cách sử dụng setInheritanceType() . Loại kế thừa xác định cách phần tử con ACL kết hợp với ACL của chính nó. Acl.InheritanceType triển khai 3 loại kế thừa:

  • BOTH_PERMIT – Đặt loại kế thừa thành BOTH_PERMIT để cấp quyền truy cập cho người dùng vào mục khi cả ACL của mục con và ACL mục kế thừa của mục gốc cho phép người dùng đó truy cập vào mục đó.

  • CHILD_OVERRIDE – Đặt loại kế thừa thành CHILD_OVERRIDE để buộc thành phần con ACL của mục được ưu tiên so với ACL của mục gốc được kế thừa khi chúng xung đột. Vì vậy, nếu ACL của mục gốc từ chối quyền truy cập của người dùng với tư cách là độc giả bị từ chối, người dùng vẫn có quyền truy cập nếu họ có quyền truy cập mục với tư cách một độc giả. Ngược lại, ngay cả khi ACL của mục gốc cấp quyền truy cập vào người dùng, người dùng sẽ không có quyền truy cập nếu họ không được phép đọc của trẻ.

  • PARENT_OVERRIDE – Đặt loại kế thừa thành PARENT_OVERRIDE để buộc áp dụng phương thức ACL của mục gốc được ưu tiên so với ACL của mục con khi chúng xung đột. Vì vậy, nếu ACL của mục con từ chối cấp quyền truy cập cho người dùng vì bị từ chối nên người dùng vẫn có quyền truy cập nếu họ có quyền truy cập vào mục mẹ dưới dạng người đọc. Ngược lại, ngay cả khi ACL của mục con cấp quyền truy cập cho người dùng, người dùng sẽ không có quyền truy cập nếu họ là người đọc mục mẹ bị từ chối.

Khi đánh giá chuỗi kế thừa ACL, thứ tự đánh giá có thể thay đổi kết quả của quyết định uỷ quyền. Cloud Search hỗ trợ từng chi tiết thứ tự đánh giá chuỗi kế thừa ACL. Cụ thể, quyết định của Danh sách kiểm soát quyền truy cập (ACL) của một chuỗi bắt đầu bằng việc đánh giá phần tử con cùng với phần tử mẹ, và có thể tiến triển đến thư mục mẹ.

Ví dụ: nếu nhà xuất bản con có loại kế thừa CHILD_OVERRIDE và người dùng có quyền truy cập vào phần tử con thì Drive không cần đánh giá phần tử mẹ. Tuy nhiên, nếu nhà xuất bản con có PARENT_OVERRIDE hoặc BOTH_PERMIT, thì Drive sẽ tiếp tục về việc đánh giá tính kế thừa ở phía trên chuỗi.

Vùng chứa và xoá vật phẩm

Khi lập chỉ mục một mục, bạn có thể gắn nhãn một mục là vùng chứa bằng cách sử dụng Phương thức setContainer() của phương thức IndexingItemBuilder . Mối quan hệ giữa vùng chứa/người nhận hàng tồn kho thiết lập mối quan hệ vật chất hệ thống phân cấp mục và đảm bảo các mục được xoá đúng cách. Khi vùng chứa bị xóa, các mục được chứa cũng sẽ bị xóa.

Các mối quan hệ vùng chứa hoàn toàn độc lập với các quy tắc kế thừa của Danh sách kiểm soát quyền truy cập (ACL). Ví dụ: một tệp trong hệ thống tệp có thể được chứa bởi một thư mục cho phần tử mục đích xóa nhưng kế thừa ACL từ một thư mục khác. Xoá một thư mục không xóa các mục kế thừa Danh sách kiểm soát quyền truy cập (ACL) của thư mục đó, trừ khi các mục đó cũng trong hệ phân cấp vùng chứa của thư mục.

Các biện pháp kiểm soát quyền truy cập này được thể hiện trong Hình 2:

  • Người dùng 1 là người dùng chính được phép trực tiếp của mục A.
  • Người dùng 2 là người dùng chính được phép trực tiếp của mục B.
  • Người dùng 3 là người dùng chính được phép trực tiếp của mục C.
  • Mục C kế thừa Danh sách kiểm soát quyền truy cập (ACL) của mục A.
  • Mục B đặt tên mục A làm vùng chứa của mục.
  • Mục C đặt tên mục B làm vùng chứa.

Dựa trên các chế độ kiểm soát quyền truy cập, các quy tắc truy cập sẽ bao gồm:

  • Quyền truy cập gián tiếp thuộc setInheritFrom() . Do đó, người dùng 1 có thể truy cập mục C vì mục C kế thừa Danh sách kiểm soát quyền truy cập (ACL) của mục A.
  • Quyền truy cập gián tiếp không đến từ mục C nằm trong mục B. Do đó, người dùng 2 không thể truy cập vào mục C.
Bản vẽ kết nối giữa các mục
Hình 2. Phương thức setInheritFrom() đang được sử dụng.

Việc phân tách kế thừa ACL khỏi hệ phân cấp vùng chứa cho phép bạn lập mô hình nhiều cấu trúc hiện có khác nhau.

Khi đã xoá một mục thành công:

  • Bất kỳ mục nào có chứa mục đã xóa sẽ không thể tìm kiếm được và để xoá khỏi nguồn dữ liệu của Google.
  • Bất kỳ mục nào đã chỉ định mục bị xoá bằng cách sử dụng Phương thức setInheritFrom() không thể tìm kiếm được.

Nếu tài nguyên có một mục đã bị xoá bằng cách sử dụng setInheritFrom() nhưng không có tập hợp vùng chứa bằng cách sử dụng setContainer() hoặc hệ phân cấp vùng chứa không chứa mục nào bị xoá, mục đó và dữ liệu tương ứng vẫn còn trong nguồn dữ liệu của Google. Bạn có trách nhiệm xoá mục đó.

Hình 3 cho thấy một ví dụ về cách xoá dữ liệu đối với một hệ phân cấp mục.

Bản vẽ kết nối giữa các mục
Hình 3. Xoá một mục và kế thừa ACL.

Các biện pháp kiểm soát quyền truy cập này được thể hiện trong Hình 3:

  • Người dùng 1 là người dùng chính được phép trực tiếp của mục A.
  • Người dùng 2 là người dùng chính được phép trực tiếp của mục D.
  • Mục D và mục E đều kế thừa Danh sách kiểm soát quyền truy cập (ACL) của mục A.
  • Mục D đặt tên mục A làm vùng chứa của mục đó.
  • Các mục A và E là các mục cấp gốc vì chúng không có mục vùng chứa.

Xoá tầng thông qua các tham chiếu vùng chứa. Khi mục A bị xoá:

  • Tất cả các thành phần con của setInheritFrom() tham chiếu mất quyền truy cập của tất cả người dùng.
  • Không người dùng nào có thể truy cập mục A.
  • Mục D sẽ bị xoá hoàn toàn. Không người dùng nào có thể truy cập mục D.
  • Mục E không bị xoá vì mục xoá chỉ xuất hiện theo vùng chứa tài liệu tham khảo.
  • Không thể kết nối với mục E và không người dùng nào có thể tìm kiếm mục E.