หากต้องการให้เฉพาะผู้ใช้ที่มีสิทธิ์เข้าถึงรายการเท่านั้นที่เห็นรายการนั้นในผลการค้นหา ให้จัดทำดัชนีรายการพร้อมรายการควบคุมการเข้าถึง (ACL) จากที่เก็บข้อมูลขององค์กร คุณต้องสร้าง ACL ของที่เก็บและรวมไว้เมื่อจัดทำดัชนี รายการ Content Connector SDK มีเมธอดในการสร้างรูปแบบ ACL ของที่เก็บข้อมูลส่วนใหญ่
สร้าง ACL
การสร้าง ACL มี 2 ขั้นตอนดังนี้
- สร้าง
Principalโดยใช้เมธอดแบบคงที่ในคลาส ACL - ใช้คลาส
Acl.Builderเพื่อสร้าง ACL โดยใช้หลักการ
เอกสารนี้ครอบคลุมแนวคิดในการสร้างแบบจำลองและสร้าง ACL เช่น การรับค่าและการบรรจุ
สร้างบัญชีหลักโดยใช้รหัสภายนอก
Google Cloud Search กำหนดให้ผู้ใช้และกลุ่มต้องได้รับการแก้ไขเป็นอีเมลของ Google
เมื่อจัดทำดัชนีรายการในที่เก็บ ตัวเชื่อมต่อเนื้อหาอาจไม่มีอีเมลเหล่านี้
อย่างไรก็ตาม Content Connector SDK ช่วยให้คุณใช้
รหัสภายนอก (รหัสที่ให้สิทธิ์ผู้ใช้หรือกลุ่มเข้าถึงรายการในที่เก็บ)
แทนอีเมลเพื่อจัดทำดัชนีรายการได้ ใช้วิธี
getUserPrincipal
หรือวิธี
getGroupPrincipal
เพื่อสร้างหลักการที่มีรหัสภายนอก คลาส
ACL
มีเมธอดแบบคงที่อื่นๆ อีกหลายรายการสำหรับสร้างออบเจ็กต์ Principal
หลังจากแมปตัวตนของรายการใหม่แล้ว คุณต้องจัดทำดัชนีรายการอีกครั้งเพื่อให้ตัวตนใหม่มีผล ดูข้อมูลเพิ่มเติมได้ที่ การแมปข้อมูลระบุตัวตนใหม่
การรับช่วง ACL
การรับค่า ACL หมายถึงการให้สิทธิ์สำหรับรายการและผู้ใช้ที่เฉพาะเจาะจง โดยอิงตาม ACL ที่รวมกันของรายการและห่วงโซ่การรับค่า กฎสำหรับ การตัดสินการให้สิทธิ์จะขึ้นอยู่กับที่เก็บและพร็อพเพอร์ตี้ของรายการ
ตั้งค่าการรับค่า
แต่ละรายการจะมีหลักที่อนุญาตโดยตรงและหลักที่ปฏิเสธโดยตรงได้
โดยระบุโดยใช้วิธีการ
setReaders
และ
setDeniedReaders
ผู้ใช้ที่ได้รับอนุญาตโดยตรงคือผู้ใช้ที่ระบุใน ACL ซึ่งมีสิทธิ์เข้าถึงรายการโดยตรง ผู้ใช้ที่ถูกปฏิเสธโดยตรงคือผู้ใช้ที่ระบุใน ACL ว่าไม่มีสิทธิ์เข้าถึงรายการ
นอกจากนี้ รายการยังรับค่า indirect allowed principals และ indirect denied
principals ได้ด้วยโดยใช้เมธอด
setInheritFrom
ผู้ใช้ที่ได้รับอนุญาตโดยอ้อมจะมีสิทธิ์เข้าถึงรายการโดยอ้อมผ่านการรับค่า ACL
ระบบจะปฏิเสธการเข้าถึงของหลักการที่ถูกปฏิเสธโดยอ้อมผ่านการรับค่า
รูปที่ 1 แสดงวิธีใช้เมธอด
setInheritFrom
เพื่อรับค่าหลัก
setInheritFromรูปที่ 1 แสดงการควบคุมการเข้าถึงต่อไปนี้
- ผู้ใช้ 1 เป็นผู้ใช้ที่ได้รับอนุญาตโดยตรงของรายการ ก
- ผู้ใช้ 2 เป็นหลักการที่ได้รับอนุญาตโดยตรงของรายการ B
- รายการ B จะรับ ACL ของรายการ A
กฎการเข้าถึงจะขึ้นอยู่กับการควบคุมเหล่านี้ ดังนี้
- ผู้ใช้ 1 เป็นผู้ใช้ที่ได้รับอนุญาตโดยอ้อมของรายการ B โดยไม่ต้องระบุอย่างชัดเจน เนื่องจากสิทธิ์เข้าถึงสืบทอดมาจากรายการ A
- ผู้ใช้ 2 ไม่ใช่ผู้ใช้หลักที่ได้รับอนุญาตโดยอ้อมของรายการ ก.
ตั้งค่าประเภทการรับค่า
หากตั้งค่าการรับค่าโดยใช้เมธอด
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
ความสัมพันธ์นี้จะสร้างลำดับชั้นทางกายภาพและช่วยให้มั่นใจได้ว่า
การลบจะดำเนินการอย่างถูกต้อง เมื่อคุณลบคอนเทนเนอร์ ระบบจะลบรายการที่อยู่ในคอนเทนเนอร์นั้นด้วย
ความสัมพันธ์แบบ Containment จะแยกจากกฎการรับค่า ACL เช่น โฟลเดอร์อาจมีไฟล์เพื่อวัตถุประสงค์ในการลบ แต่ไฟล์อาจ รับช่วง ACL จากโฟลเดอร์อื่น การลบโฟลเดอร์จะไม่ลบรายการ ที่รับช่วง ACL ของโฟลเดอร์นั้น เว้นแต่รายการเหล่านั้นจะอยู่ในลำดับชั้นการบรรจุของโฟลเดอร์ด้วย
รูปที่ 2 แสดงการควบคุมการเข้าถึงต่อไปนี้
- ผู้ใช้ 1 เป็นผู้ใช้ที่ได้รับอนุญาตโดยตรงของรายการ ก
- ผู้ใช้ 2 เป็นหลักการที่ได้รับอนุญาตโดยตรงของรายการ B
- ผู้ใช้ 3 เป็นหลักการที่ได้รับอนุญาตโดยตรงของรายการ C
- รายการ C จะรับ ACL ของรายการ A
- รายการ B ระบุว่ารายการ A เป็นคอนเทนเนอร์ของตน
- รายการ C ระบุรายการ B เป็นคอนเทนเนอร์
กฎการเข้าถึงจะขึ้นอยู่กับการควบคุมเหล่านี้ ดังนี้
- การเข้าถึงโดยอ้อมมาจากเมธอด
setInheritFromผู้ใช้ 1 เข้าถึงรายการ ค ได้เนื่องจากรับค่ามาจากรายการ ก - การเข้าถึงโดยอ้อมไม่ได้มาจากการกักเก็บ ผู้ใช้ 2 เข้าถึงรายการ ค. ไม่ได้
setInheritFrom
ที่ใช้อยู่การแยกการรับค่า ACL จากการบรรจุช่วยให้คุณสร้างโครงสร้างได้หลายแบบ
สิ่งที่จะเกิดขึ้นเมื่อลบรายการ
- รายการที่มีรายการที่ถูกลบจะค้นหาไม่ได้และระบบจะกำหนดเวลา การลบ
- รายการใดๆ ที่ระบุรายการที่ถูกลบใน
setInheritFromจะค้นหาไม่ได้
หากทรัพยากรใช้ setInheritFrom สำหรับสินค้าที่ถูกลบ แต่ไม่มีการตั้งค่าคอนเทนเนอร์
หรือลำดับชั้นไม่มีสินค้าที่ถูกลบ สินค้าจะยังคงอยู่ในแหล่งข้อมูล
คุณมีหน้าที่รับผิดชอบในการลบ
รูปที่ 3 แสดงตัวอย่างการลบลำดับชั้นของรายการ
รูปที่ 3 แสดงการควบคุมการเข้าถึงต่อไปนี้
- ผู้ใช้ 1 เป็นผู้ใช้ที่ได้รับอนุญาตโดยตรงของรายการ ก
- ผู้ใช้ 2 เป็นหลักการที่ได้รับอนุญาตโดยตรงของรายการ D
- รายการ ง. และ จ. สืบทอดมาจากรายการ ก.
- รายการ D ระบุว่ารายการ A เป็นคอนเทนเนอร์
- รายการ ก. และ จ. เป็นรายการระดับรูท
การลบจะส่งผลต่อการอ้างอิงคอนเทนเนอร์ เมื่อคุณลบรายการ ก. จะเกิดอะไรขึ้น
- ลูกหลานทั้งหมดของข้อมูลอ้างอิง
setInheritFromจะเสียสิทธิ์เข้าถึง - ผู้ใช้จะเข้าถึงรายการ ก ไม่ได้อีกต่อไป
- ระบบจะลบรายการ D โดยนัยและจะเข้าถึงไม่ได้
- ระบบจะไม่ลบรายการ E แต่จะทำให้เข้าถึงและค้นหาไม่ได้