Memetakan ACL

Untuk memastikan hanya pengguna yang memiliki akses ke item yang dapat melihatnya di hasil penelusuran, indeks item dengan daftar kontrol akses (ACL) dari repositori perusahaan. Anda harus membuat model ACL repositori dan menyertakannya saat mengindeks item. Content Connector SDK menyediakan metode untuk membuat model ACL di sebagian besar repositori.

Membuat ACL

Membuat ACL merupakan proses dua langkah:

  1. Buat Principal menggunakan metode statis di class ACL.
  2. Gunakan class Acl.Builder untuk membuat ACL menggunakan entity utama.

Dokumen ini membahas konsep untuk membuat model dan membuat ACL, seperti pewarisan dan pemuatan.

Membuat entity utama menggunakan ID eksternal

Google Cloud Search mengharuskan pengguna dan grup untuk menangani alamat email Google. Saat mengindeks item repositori, konektor konten mungkin tidak memiliki alamat email ini. Namun, Content Connector SDK memungkinkan Anda menggunakan ID eksternal (ID yang memberi pengguna atau grup akses ke item repositori) bukan alamat email untuk mengindeks item. Gunakan metode getUserPrincipal atau metode getGroupPrincipal untuk membuat entity utama yang berisi ID eksternal. Class ACL mencakup beberapa metode statis lainnya untuk membuat objek Principal.

Setelah memetakan ulang identitas item, Anda harus mengindeks ulang item agar identitas baru diterapkan. Untuk mengetahui informasi selengkapnya, lihat Memetakan ulang identitas.

Pewarisan ACL

Pewarisan ACL mengacu pada otorisasi untuk item dan pengguna tertentu berdasarkan gabungan ACL item dan rantai pewarisannya. Aturan untuk keputusan otorisasi bergantung pada repositori dan properti item.

Menetapkan pewarisan

Setiap item dapat memiliki entity utama langsung yang diizinkan dan entity utama langsung yang ditolak, yang ditentukan menggunakan metode setReaders dan setDeniedReaders. Entity utama langsung yang diizinkan adalah pengguna yang diidentifikasi dalam ACL dengan akses langsung ke item. Entity utama langsung yang ditolak adalah pengguna yang diidentifikasi dalam ACL sebagai tidak memiliki akses ke item.

Item juga dapat mewarisi entity utama tidak langsung yang diizinkan dan entity utama tidak langsung yang ditolak menggunakan metode setInheritFrom. Entity utama tidak langsung yang diizinkan memiliki akses tidak langsung ke item melalui pewarisan ACL. Entity utama tidak langsung yang ditolak aksesnya melalui pewarisan.

Gambar 1 menunjukkan cara menggunakan metode setInheritFrom untuk mewarisi entity utama.

Gambar koneksi antaritem
Gambar 1. Metode setInheritFrom.

Gambar 1 menunjukkan kontrol akses ini:

  • Pengguna 1 adalah entity utama langsung yang diizinkan dari item A.
  • Pengguna 2 adalah entity utama langsung yang diizinkan dari item B.
  • Item B mewarisi ACL dari item A.

Berdasarkan kontrol ini, aturan aksesnya adalah:

  • Pengguna 1 adalah entity utama tidak langsung yang diizinkan dari item B tanpa ditentukan secara eksplisit; akses diwarisi dari item A.
  • Pengguna 2 bukanlah entity utama tidak langsung yang diizinkan dari item A.

Menetapkan jenis pewarisan

Jika Anda menetapkan pewarisan menggunakan metode setInheritFrom, Anda harus menetapkan jenis pewarisan menggunakan metode setInheritanceType. Jenis pewarisan menentukan cara ACL turunan digabungkan dengan ACL induk. Acl.InheritanceType menerapkan tiga jenis:

  • BOTH_PERMIT - Memberikan akses hanya jika ACL anak dan orang tua mengizinkannya.
  • CHILD_OVERRIDE - ACL turunan lebih diprioritaskan daripada ACL induk jika terjadi konflik. Pengguna dapat mengakses turunan meskipun induk menolaknya, atau ditolak akses ke turunan meskipun induk mengizinkannya.
  • PARENT_OVERRIDE - ACL induk lebih diprioritaskan daripada ACL turunan jika terjadi konflik.

Cloud Search mengevaluasi rantai pewarisan ACL dari item turunan hingga item induk. Evaluasi dimulai dengan anak dan orang tuanya, dan dapat berlanjut ke orang tua root.

Misalnya, jika anak menggunakan CHILD_OVERRIDE dan pengguna memiliki akses, Cloud Search tidak perlu mengevaluasi induk. Namun, jika turunan menggunakan PARENT_OVERRIDE atau BOTH_PERMIT, Cloud Search akan terus mengevaluasi rantai.

Pemuatan dan penghapusan item

Saat mengindeks item, Anda dapat melabelinya sebagai penampung menggunakan metode setContainer dari class IndexingItemBuilder. Hubungan ini menetapkan hierarki fisik dan memastikan penghapusan yang tepat. Saat Anda menghapus penampung, item yang ada di dalamnya juga akan dihapus.

Hubungan pemuatan tidak bergantung pada aturan pewarisan ACL. Misalnya, folder dapat berisi file untuk tujuan penghapusan, tetapi file dapat mewarisi ACL-nya dari folder yang berbeda. Menghapus folder tidak akan menghapus item yang mewarisi ACL-nya, kecuali item tersebut juga berada dalam hierarki pemuatannya.

Gambar 2 menunjukkan kontrol akses ini:

  • Pengguna 1 adalah entity utama langsung yang diizinkan dari item A.
  • Pengguna 2 adalah entity utama langsung yang diizinkan dari item B.
  • Pengguna 3 adalah entity utama langsung yang diizinkan dari item C.
  • Item C mewarisi ACL dari item A.
  • Item B menyebut item A sebagai container-nya.
  • Item C menyebut item B sebagai container-nya.

Berdasarkan kontrol ini, aturan aksesnya adalah:

  • Akses tidak langsung berasal dari metode setInheritFrom. Pengguna 1 dapat mengakses item C karena item C mewarisi dari item A.
  • Akses tidak langsung tidak berasal dari penampungan. Pengguna 2 tidak dapat mengakses item C.
Gambar koneksi antaritem
Gambar 2. Metode setInheritFrom yang sedang digunakan.

Pemisahan pewarisan ACL dari pemuatan memungkinkan Anda membuat model banyak struktur.

Saat Anda menghapus item:

  • Semua item yang berisi item yang dihapus menjadi tidak dapat ditelusuri dan dijadwalkan untuk dihapus.
  • Setiap item yang menentukan item yang dihapus di setInheritFrom menjadi tidak dapat ditelusuri.

Jika resource menggunakan setInheritFrom untuk item yang dihapus, tetapi tidak menetapkan penampung atau hierarkinya tidak berisi item yang dihapus, item tersebut akan tetap ada di sumber data. Anda bertanggung jawab untuk menghapusnya.

Gambar 3 menunjukkan contoh penghapusan untuk hierarki item.

Gambar koneksi antaritem
Gambar 3. Menghapus item dan pewarisan ACL.

Gambar 3 menunjukkan kontrol akses ini:

  • Pengguna 1 adalah entity utama langsung yang diizinkan dari item A.
  • Pengguna 2 adalah entity utama langsung yang diizinkan dari item D.
  • Item D dan E mewarisi dari item A.
  • Item D menyebut item A sebagai container-nya.
  • Item A dan E adalah item tingkat root.

Penghapusan menurun melalui referensi container. Saat Anda menghapus item A:

  • Semua turunan referensi setInheritFrom kehilangan akses.
  • Pengguna tidak dapat lagi mengakses item A.
  • Item D dihapus secara implisit dan menjadi tidak dapat diakses.
  • Item E tidak dihapus, tetapi menjadi tidak dapat dijangkau dan tidak dapat ditelusuri.