หากต้องการให้เฉพาะผู้ใช้ที่มีสิทธิ์เข้าถึงรายการเท่านั้นที่เห็นรายการนั้นในผลการค้นหา ให้จัดทำดัชนีรายการด้วยรายการควบคุมการเข้าถึง (ACL) จากที่เก็บข้อมูลขององค์กร คุณต้องสร้างโมเดล ACL ของที่เก็บข้อมูลและรวม ACL เหล่านั้นไว้เมื่อจัดทำดัชนีรายการ Content Connector SDK มีเมธอดสำหรับสร้างโมเดล ACL ของที่เก็บข้อมูลส่วนใหญ่
สร้าง ACL
การสร้าง ACL เป็นกระบวนการ 2 ขั้นตอน ดังนี้
- สร้าง
Principalโดยใช้เมธอดแบบคงที่ในคลาส ACL - ใช้คลาส
Acl.Builderเพื่อสร้าง ACL โดยใช้ Principal
เอกสารนี้ครอบคลุมแนวคิดในการสร้างโมเดลและสร้าง ACL เช่น การรับช่วงและการบรรจุ
สร้าง Principal โดยใช้รหัสภายนอก
Google Cloud Search กำหนดให้ผู้ใช้และกลุ่มต้องได้รับการแก้ไขเป็นอีเมล Google เมื่อจัดทำดัชนีรายการที่เก็บข้อมูล คอนเน็กเตอร์เนื้อหาอาจไม่มีอีเมลเหล่านี้ อย่างไรก็ตาม Content Connector SDK ช่วยให้คุณใช้ รหัสภายนอก (รหัสที่ให้สิทธิ์เข้าถึงรายการที่เก็บข้อมูลแก่ผู้ใช้หรือกลุ่ม) แทนอีเมลเพื่อจัดทำดัชนีรายการได้ ใช้
getUserPrincipal
เมธอด หรือ
getGroupPrincipal
เมธอด เพื่อสร้าง Principal ที่มีรหัสภายนอก คลาส
ACL
มีเมธอดแบบคงที่อื่นๆ อีกหลายรายการสำหรับสร้างออบเจ็กต์ Principal
หลังจากเปลี่ยนการแมปข้อมูลประจำตัวของรายการแล้ว คุณต้องจัดทำดัชนีรายการอีกครั้งเพื่อให้ข้อมูลประจำตัวใหม่มีผล ดูข้อมูลเพิ่มเติมได้ที่ การเปลี่ยนการแมปข้อมูลประจำตัว
การรับช่วง ACL
การรับช่วง ACL หมายถึงการให้สิทธิ์สำหรับรายการและผู้ใช้ที่เฉพาะเจาะจงโดยอิงตาม ACL ที่รวมกันของรายการและห่วงโซ่การรับช่วง กฎสำหรับการตัดสินใจให้สิทธิ์จะขึ้นอยู่กับที่เก็บข้อมูลและพร็อพเพอร์ตี้ของรายการ
ตั้งค่าการรับช่วง
แต่ละรายการจะมี Principal ที่ได้รับอนุญาตโดยตรง และ Principal ที่ถูกปฏิเสธโดยตรง,
ซึ่งระบุโดยใช้
setReaders
และ
setDeniedReaders
เมธอด Principal ที่ได้รับอนุญาตโดยตรงคือผู้ใช้ที่ระบุไว้ใน ACL ซึ่งมีสิทธิ์เข้าถึงรายการโดยตรง Principal ที่ถูกปฏิเสธโดยตรงคือผู้ใช้ที่ระบุไว้ใน ACL ว่าไม่มีสิทธิ์เข้าถึงรายการ
นอกจากนี้ รายการยังสามารถรับช่วง Principal ที่ได้รับอนุญาตโดยอ้อม และ Principal ที่ถูกปฏิเสธโดยอ้อม
โดยใช้เมธอด
setInheritFrom
Principal ที่ได้รับอนุญาตโดยอ้อมมีสิทธิ์เข้าถึงรายการโดยอ้อมผ่านการรับช่วง ACL Principal ที่ถูกปฏิเสธโดยอ้อมจะถูกปฏิเสธการเข้าถึงผ่านการรับช่วง
รูปที่ 1 แสดงวิธีใช้เมธอด
setInheritFrom
เพื่อรับช่วง Principal
setInheritFromรูปที่ 1 แสดงการควบคุมการเข้าถึงต่อไปนี้
- ผู้ใช้ 1 เป็น Principal ที่ได้รับอนุญาตโดยตรงของรายการ ก.
- ผู้ใช้ 2 เป็น Principal ที่ได้รับอนุญาตโดยตรงของรายการ ข.
- รายการ ข. รับช่วง ACL ของรายการ ก.
กฎการเข้าถึงจะเป็นดังนี้ตามการควบคุมเหล่านี้
- ผู้ใช้ 1 เป็น Principal ที่ได้รับอนุญาตโดยอ้อมของรายการ ข. โดยไม่ต้องระบุอย่างชัดเจน เนื่องจากสิทธิ์เข้าถึงรับช่วงมาจากรายการ ก.
- ผู้ใช้ 2 ไม่ใช่ Principal ที่ได้รับอนุญาตโดยอ้อมของรายการ ก.
ตั้งค่าประเภทการรับช่วง
หากตั้งค่าการรับช่วงโดยใช้เมธอด
setInheritFrom
คุณต้องตั้งค่าประเภทการรับช่วงโดยใช้เมธอด
setInheritanceType
ประเภทการรับช่วงจะกำหนดวิธีที่ ACL ของรายการย่อยรวมกับ ACL ของรายการหลัก
Acl.InheritanceType
มี 3 ประเภท ดังนี้
BOTH_PERMIT- ให้สิทธิ์เข้าถึงเฉพาะเมื่อทั้ง ACL ของรายการย่อยและรายการหลักอนุญาตCHILD_OVERRIDE- ACL ของรายการย่อยมีความสำคัญเหนือกว่า ACL ของรายการหลักในกรณีที่เกิดความขัดแย้ง ผู้ใช้สามารถเข้าถึงรายการย่อยได้แม้ว่ารายการหลักจะปฏิเสธ หรือถูกปฏิเสธการเข้าถึงรายการย่อยแม้ว่ารายการหลักจะอนุญาตPARENT_OVERRIDE- ACL ของรายการหลักมีความสำคัญเหนือกว่า ACL ของรายการย่อยใน กรณีที่เกิดความขัดแย้ง
Cloud Search จะประเมินห่วงโซ่การรับช่วง ACL จากรายการย่อยไปยังรายการหลัก การประเมินจะเริ่มต้นด้วยรายการย่อยและรายการหลักของรายการย่อย และสามารถดำเนินการต่อไปยังรายการหลักระดับบนสุด
ตัวอย่างเช่น หากรายการย่อยใช้ CHILD_OVERRIDE และผู้ใช้มีสิทธิ์เข้าถึง Cloud Search ก็ไม่จำเป็นต้องประเมินรายการหลัก อย่างไรก็ตาม หากรายการย่อยใช้ PARENT_OVERRIDE หรือ BOTH_PERMIT Cloud Search จะประเมินห่วงโซ่ต่อไป
การบรรจุและการลบรายการ
เมื่อจัดทำดัชนีรายการ คุณสามารถติดป้ายกำกับรายการเป็นคอนเทนเนอร์ได้โดยใช้
setContainer
เมธอดของ
IndexingItemBuilder
คลาส ความสัมพันธ์นี้จะสร้างลำดับชั้นทางกายภาพและทำให้มั่นใจได้ว่าจะมีการลบอย่างเหมาะสม เมื่อคุณลบคอนเทนเนอร์ ระบบจะลบรายการที่อยู่ในคอนเทนเนอร์นั้นด้วย
ความสัมพันธ์แบบบรรจุเป็นอิสระจากกฎการรับช่วง ACL ตัวอย่างเช่น โฟลเดอร์สามารถมีไฟล์ไว้เพื่อวัตถุประสงค์ในการลบ แต่ไฟล์สามารถรับช่วง ACL จากโฟลเดอร์อื่นได้ การลบโฟลเดอร์จะไม่ลบรายการที่รับช่วง ACL ของโฟลเดอร์นั้น เว้นแต่รายการเหล่านั้นจะอยู่ในลำดับชั้นแบบบรรจุของโฟลเดอร์ด้วย
รูปที่ 2 แสดงการควบคุมการเข้าถึงต่อไปนี้
- ผู้ใช้ 1 เป็น Principal ที่ได้รับอนุญาตโดยตรงของรายการ ก.
- ผู้ใช้ 2 เป็น Principal ที่ได้รับอนุญาตโดยตรงของรายการ ข.
- ผู้ใช้ 3 เป็น Principal ที่ได้รับอนุญาตโดยตรงของรายการ ค.
- รายการ ค. รับช่วง ACL ของรายการ ก.
- รายการ ข. ระบุรายการ ก. เป็นคอนเทนเนอร์
- รายการ ค. ระบุรายการ ข. เป็นคอนเทนเนอร์
กฎการเข้าถึงจะเป็นดังนี้ตามการควบคุมเหล่านี้
- สิทธิ์เข้าถึงโดยอ้อมมาจาก
setInheritFromเมธอด ผู้ใช้ 1 เข้าถึงรายการ ค. ได้เนื่องจากรับช่วงมาจากรายการ ก. - สิทธิ์เข้าถึงโดยอ้อมไม่ได้มาจากการบรรจุ ผู้ใช้ 2 ไม่สามารถเข้าถึงรายการ ค.
setInheritFrom
ที่ใช้งานการแยกการรับช่วง ACL ออกจากการบรรจุช่วยให้คุณสร้างโมเดลโครงสร้างต่างๆ ได้
เมื่อคุณลบรายการ สิ่งที่จะเกิดขึ้นมีดังนี้
- รายการใดก็ตามที่มีรายการที่ถูกลบจะค้นหาไม่ได้และระบบจะกำหนดเวลาให้ลบ
- รายการใดก็ตามที่ระบุรายการที่ถูกลบใน
setInheritFromจะค้นหาไม่ได้
หากทรัพยากรใช้ setInheritFrom สำหรับรายการที่ถูกลบ แต่ไม่ได้ตั้งค่าคอนเทนเนอร์ หรือลำดับชั้นไม่มีรายการที่ถูกลบ รายการจะยังคงอยู่ในแหล่งข้อมูล
คุณมีหน้าที่รับผิดชอบในการลบรายการดังกล่าว
รูปที่ 3 แสดงตัวอย่างการลบสำหรับลำดับชั้นของรายการ
รูปที่ 3 แสดงการควบคุมการเข้าถึงต่อไปนี้
- ผู้ใช้ 1 เป็น Principal ที่ได้รับอนุญาตโดยตรงของรายการ ก.
- ผู้ใช้ 2 เป็น Principal ที่ได้รับอนุญาตโดยตรงของรายการ ง.
- ทั้งรายการ ง. และ จ. รับช่วงมาจากรายการ ก.
- รายการ ง. ระบุรายการ ก. เป็นคอนเทนเนอร์
- รายการ ก. และ จ. เป็นรายการระดับราก
การลบจะส่งผลแบบลามไปตามข้อมูลอ้างอิงคอนเทนเนอร์ เมื่อคุณลบรายการ ก. สิ่งที่จะเกิดขึ้นมีดังนี้
- รายการที่สืบทอดมาจากข้อมูลอ้างอิง
setInheritFromทั้งหมดจะเสียสิทธิ์เข้าถึง - ผู้ใช้จะเข้าถึงรายการ ก. ไม่ได้อีกต่อไป
- ระบบจะลบรายการ ง. โดยนัยและทำให้เข้าถึงไม่ได้
- ระบบจะไม่ลบรายการ จ. แต่จะทำให้เข้าถึงไม่ได้และค้นหาไม่พบ