Untuk memastikan bahwa hanya pengguna yang memiliki akses ke item yang dapat melihat item tersebut dalam hasil penelusuran, Anda harus mengindeks item dengan daftar kontrol akses (ACL) dari repositori perusahaan. Anda harus membuat model ACL repositori Anda dan menyertakan ACL tersebut saat mengindeks item dalam repositori. Konektor Konten SDK menyediakan serangkaian metode ACL yang cukup cukup kuat untuk membuat model ACL dari sebagian besar repositori.
Membuat ACL
Membuat ACL merupakan proses dua langkah:
- Buat
Principal
menggunakan metode statis di ACL . - Menggunakan
Acl.Builder
untuk membangun ACL menggunakan akun utama.
Bagian selanjutnya dari dokumen ini mencakup beberapa konsep yang perlu Anda ketahui untuk membuat model dan membuat ACL, seperti pewarisan dan pembatasan.
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), sebagai gantinya
alamat email, untuk mengindeks item. Gunakan
getUserPrincipal()
metode atau
getGroupPrincpal()
untuk membuat akun utama yang berisi ID eksternal. Ada beberapa
metode statis dalam
ACL
yang digunakan untuk membangun
Objek Principal
.
Pewarisan ACL
Pewarisan ACL mengacu pada otorisasi, untuk item tertentu dan berdasarkan hasil kombinasi ACL item dan ACL dari rantai pewarisannya. Aturan yang digunakan untuk membuat keputusan otorisasi bergantung pada repositori dan properti item.
Menetapkan pewarisan
Setiap item dapat memiliki akun utama langsung yang diizinkan dan akun utama langsung yang ditolak,
ditentukan menggunakan atribut
setReaders()
dan
Metode setDeniedReaders()
. Entity utama langsung yang diizinkan adalah pengguna yang diidentifikasi dalam ACL, yang diberi akses langsung ke item tertentu. Entity utama langsung yang ditolak adalah pengguna yang diidentifikasi dalam ACL sebagai tidak memiliki akses ke item tertentu.
Item juga dapat mewarisi akun utama tidak langsung yang diizinkan dan
akun utama tidak langsung yang ditolak menggunakan
setInheritFrom()
. Entity utama tidak langsung yang diizinkan adalah pengguna yang memiliki akses tidak langsung ke item tertentu melalui pewarisan ACL. Entity utama tidak langsung yang ditolak adalah pengguna yang ditolak aksesnya ke item tertentu melalui pewarisan ACL.
Gambar 1 menunjukkan bagaimana
Metode setInheritFrom()
digunakan untuk mewarisi akun utama tidak langsung yang diizinkan dan tidak langsung yang ditolak.
Kontrol akses ini direpresentasikan pada Gambar 1:
- 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 akses tersebut, aturan aksesnya adalah:
- Pengguna 1 tidak perlu ditentukan secara eksplisit sebagai entity utama dari item B untuk menjadi entity utama tidak langsung yang diizinkan dari item B; akses diwarisi karena Pengguna 1 terdaftar sebagai entity utama langsung yang diizinkan dari item A dan item B mewarisi ACL dari item A.
- Pengguna 2 bukan akun utama tidak langsung yang diizinkan untuk item A.
Menetapkan jenis pewarisan
Jika Anda menetapkan pewarisan menggunakan metode
setInheritFrom()
, Anda harus menetapkan jenis pewarisan menggunakan metode
setInheritanceType()
. Jenis pewarisan menentukan cara metode
ACL bergabung dengan ACL induknya. Acl.InheritanceType
mengimplementasikan tiga jenis pewarisan:
BOTH_PERMIT
- Menetapkan jenis pewarisan keBOTH_PERMIT
untuk memberi pengguna akses ke item hanya jika ACL item turunan dan ACL item induk yang diwarisi mengizinkan pengguna untuk mengakses item tersebut.CHILD_OVERRIDE
- Menetapkan jenis pewarisan keCHILD_OVERRIDE
untuk memaksa turunan ACL item lebih diprioritaskan daripada ACL item induk yang diwarisi saat item konflik. Jadi, jika ACL item induk menolak akses pengguna sebagai pembaca yang ditolak, pengguna masih memiliki akses jika ia memiliki akses ke item turunan sebagai pembaca. Sebaliknya, meskipun ACL item induk memberikan akses kepada pengguna, pengguna tidak akan memiliki akses jika ia adalah pembaca yang ditolak dari ACL item turunan.PARENT_OVERRIDE
- Tetapkan jenis pewarisan kePARENT_OVERRIDE
untuk memaksakan ACL item induk agar diprioritaskan dibandingkan ACL item turunan saat konflik. Jadi, jika ACL item turunan menolak akses pengguna sebagai pembaca yang ditolak, pengguna masih memiliki akses jika ia memiliki akses ke item induk sebagai pembaca. Sebaliknya, meskipun ACL item turunan memberikan akses kepada pengguna, pengguna tidak memiliki akses jika ia adalah pembaca yang ditolak dari ACL item induk.
Saat mengevaluasi rantai pewarisan ACL, urutan evaluasi dapat mengubah hasil keputusan otorisasi. Cloud Search menyediakan urutan evaluasi menyeluruh untuk rantai pewarisan ACL. Secara khusus, keputusan ACL untuk rantai dimulai dengan evaluasi anak dengan induknya, dan dapat berkembang ke induk {i>root<i}.
Misalnya, jika turunan memiliki jenis pewarisan CHILD_OVERRIDE
dan pengguna
memiliki akses ke turunan, Drive tidak perlu mengevaluasi induk.
Namun, jika turunan memiliki PARENT_OVERRIDE atau BOTH_PERMIT, Drive akan melanjutkan
tentang mengevaluasi pewarisan
lebih jauh lagi.
Pemuatan dan penghapusan item
Saat mengindeks item, Anda dapat memberi label item sebagai penampung menggunakan
Metode setContainer()
dari
IndexingItemBuilder
. Hubungan container/containee menetapkan
hierarki item dan memastikan item dihapus dengan benar.
Saat container dihapus, item yang ada pada container tersebut juga akan dihapus.
Hubungan pemuatan sepenuhnya tidak bergantung pada aturan pewarisan ACL. Sebagai contoh, file pada sistem file dapat disimpan dalam folder untuk tujuan penghapusan, tetapi mewarisi ACL dari folder yang berbeda. Menghapus folder tidak akan menghapus item yang mewarisi ACL-nya, kecuali item tersebut juga berada dalam hierarki pemuatan folder.
Kontrol akses ini direpresentasikan pada Gambar 2:
- 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 akses tersebut, aturan aksesnya adalah:
- Akses tidak langsung berasal dari
setInheritFrom()
. Oleh karena itu, pengguna 1 dapat mengakses item C karena item C mewarisi ACL dari item A. - Akses tidak langsung tidak berasal dari item C yang ada dalam item B. Oleh karena itu, pengguna 2 tidak dapat mengakses item C.
Pemisahan pewarisan ACL dari hierarki {i>containment<i} memungkinkan Anda membuat model banyak struktur yang berbeda.
Saat item berhasil dihapus:
- Semua item yang berisi item yang dihapus menjadi tidak dapat ditelusuri dan dijadwalkan untuk dihapus dari sumber data Google.
- Item apa pun yang telah menentukan item yang dihapus menggunakan
Metode
setInheritFrom()
menjadi tidak dapat ditelusuri.
Jika resource memiliki item yang telah dihapus menggunakan
setInheritFrom()
, namun tidak memiliki penampung yang ditetapkan menggunakan
setContainer()
, atau hierarki pembatasannya tidak berisi item yang dihapus, item tersebut beserta datanya
tetap ada di sumber data Google. Anda harus menghapus item tersebut.
Gambar 3 menunjukkan contoh cara kerja penghapusan untuk hierarki item.
Kontrol akses ini direpresentasikan pada Gambar 3:
- Pengguna 1 adalah entity utama langsung yang diizinkan dari item A.
- Pengguna 2 adalah akun utama langsung yang diizinkan dari item D.
- Item D dan item E mewarisi ACL dari item A.
- Item D menyebut item A sebagai container-nya.
- Item A dan E merupakan item tingkat root karena tidak memiliki item container.
Penghapusan menurun melalui referensi container. Saat item A dihapus:
- Semua turunan dari
setInheritFrom()
kehilangan akses bagi semua pengguna. - Tidak ada pengguna yang dapat mengakses item A.
- Item D dihapus secara implisit. Tidak ada pengguna yang dapat mengakses item D.
- Item E tidak dihapus karena penghapusan hanya menurun melalui referensi container.
- Item E menjadi tidak dapat dijangkau dan tidak ada pengguna yang dapat menelusuri item E.