ACL ของแผนที่

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

สร้าง ACL

การสร้าง ACL มี 2 ขั้นตอนดังนี้

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

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

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

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

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

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

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

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

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

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

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

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