ACL ของแผนที่

หากต้องการให้เฉพาะผู้ใช้ที่มีสิทธิ์เข้าถึงรายการเท่านั้นที่เห็นรายการนั้นในผลการค้นหา ให้จัดทำดัชนีรายการด้วยรายการควบคุมการเข้าถึง (ACL) จากที่เก็บข้อมูลขององค์กร คุณต้องสร้างโมเดล ACL ของที่เก็บข้อมูลและรวม ACL เหล่านั้นไว้เมื่อจัดทำดัชนีรายการ Content Connector SDK มีเมธอดสำหรับสร้างโมเดล ACL ของที่เก็บข้อมูลส่วนใหญ่

สร้าง ACL

การสร้าง ACL เป็นกระบวนการ 2 ขั้นตอน ดังนี้

  1. สร้าง Principal โดยใช้เมธอดแบบคงที่ในคลาส ACL
  2. ใช้คลาส 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

การวาดการเชื่อมต่อระหว่างรายการ
รูปที่ 1 เมธอด 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 ไม่สามารถเข้าถึงรายการ ค.
การวาดการเชื่อมต่อระหว่างรายการ
รูปที่ 2 เมธอด setInheritFrom ที่ใช้งาน

การแยกการรับช่วง ACL ออกจากการบรรจุช่วยให้คุณสร้างโมเดลโครงสร้างต่างๆ ได้

เมื่อคุณลบรายการ สิ่งที่จะเกิดขึ้นมีดังนี้

  • รายการใดก็ตามที่มีรายการที่ถูกลบจะค้นหาไม่ได้และระบบจะกำหนดเวลาให้ลบ
  • รายการใดก็ตามที่ระบุรายการที่ถูกลบใน setInheritFrom จะค้นหาไม่ได้

หากทรัพยากรใช้ setInheritFrom สำหรับรายการที่ถูกลบ แต่ไม่ได้ตั้งค่าคอนเทนเนอร์ หรือลำดับชั้นไม่มีรายการที่ถูกลบ รายการจะยังคงอยู่ในแหล่งข้อมูล คุณมีหน้าที่รับผิดชอบในการลบรายการดังกล่าว

รูปที่ 3 แสดงตัวอย่างการลบสำหรับลำดับชั้นของรายการ

การวาดการเชื่อมต่อระหว่างรายการ
รูปที่ 3 การลบรายการและการรับช่วง ACL

รูปที่ 3 แสดงการควบคุมการเข้าถึงต่อไปนี้

  • ผู้ใช้ 1 เป็น Principal ที่ได้รับอนุญาตโดยตรงของรายการ ก.
  • ผู้ใช้ 2 เป็น Principal ที่ได้รับอนุญาตโดยตรงของรายการ ง.
  • ทั้งรายการ ง. และ จ. รับช่วงมาจากรายการ ก.
  • รายการ ง. ระบุรายการ ก. เป็นคอนเทนเนอร์
  • รายการ ก. และ จ. เป็นรายการระดับราก

การลบจะส่งผลแบบลามไปตามข้อมูลอ้างอิงคอนเทนเนอร์ เมื่อคุณลบรายการ ก. สิ่งที่จะเกิดขึ้นมีดังนี้

  • รายการที่สืบทอดมาจากข้อมูลอ้างอิง setInheritFrom ทั้งหมดจะเสียสิทธิ์เข้าถึง
  • ผู้ใช้จะเข้าถึงรายการ ก. ไม่ได้อีกต่อไป
  • ระบบจะลบรายการ ง. โดยนัยและทำให้เข้าถึงไม่ได้
  • ระบบจะไม่ลบรายการ จ. แต่จะทำให้เข้าถึงไม่ได้และค้นหาไม่พบ