Memetakan ACL

Untuk memastikan bahwa hanya pengguna yang memiliki akses ke item yang dapat melihatnya dalam 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 adalah proses dua langkah:

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

Dokumen ini mencakup 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 di-resolve ke 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 memberikan akses pengguna atau grup ke item repositori) sebagai pengganti alamat email untuk mengindeks item. Gunakan metode getUserPrincipal atau metode getGroupPrincipal untuk membuat entity utama yang berisi ID eksternal. Class ACL menyertakan 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 ACL gabungan 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 setReaders dan setDeniedReaders metode. 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 setInheritFrom metode. Entity utama tidak langsung yang diizinkan memiliki akses tidak langsung ke item melalui pewarisan ACL. Entity utama tidak langsung yang ditolak tidak memiliki akses melalui pewarisan.

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

Gambar koneksi antaritem
Gambar 1. Metode setInheritFrom.

Gambar 1 mewakili kontrol akses berikut:

  • 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 turunan dan induk mengizinkan nya.
  • CHILD_OVERRIDE - ACL turunan lebih diutamakan daripada ACL induk jika terjadi konflik. Pengguna dapat mengakses turunan meskipun induk menolaknya, atau ditolak aksesnya ke turunan meskipun induk mengizinkannya.
  • PARENT_OVERRIDE - ACL induk lebih diutamakan daripada ACL turunan jika terjadi konflik.

Cloud Search mengevaluasi rantai pewarisan ACL dari turunan ke induk. Evaluasi dimulai dengan turunan dan induknya, dan dapat berlanjut ke induk root.

Misalnya, jika turunan 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 memberinya label sebagai container menggunakan metode setContainer dari class IndexingItemBuilder. Hubungan ini menetapkan hierarki fisik dan memastikan penghapusan yang tepat. Saat Anda menghapus container, 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 lain. Menghapus folder tidak akan menghapus item yang mewarisi ACL-nya, kecuali item tersebut juga berada dalam hierarki pemuatannya.

Gambar 2 mewakili kontrol akses berikut:

  • 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 setInheritFrom metode. Pengguna 1 dapat mengakses item C karena mewarisi dari item A.
  • Akses tidak langsung tidak berasal dari pemuatan. Pengguna 2 tidak dapat mengakses item C.
Gambar koneksi antaritem
Gambar 2. Metode setInheritFrom yang digunakan.

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

Saat Anda menghapus item:

  • Setiap 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 memiliki container yang ditetapkan atau hierarkinya tidak berisi item yang dihapus, item tersebut akan tetap berada 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 mewakili kontrol akses berikut:

  • 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 merupakan 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.