ไฟล์ โฟลเดอร์ และไดรฟ์ที่แชร์ทุกรายการใน Google ไดรฟ์จะมีทรัพยากร permissions ที่เชื่อมโยงอยู่ แต่ละทรัพยากรจะ
ระบุสิทธิ์สำหรับtype (user
group domain anyone) และ
role (owner
organizer fileOrganizer writer commenter reader) ที่เฉพาะเจาะจง ตัวอย่างเช่น ไฟล์อาจมีสิทธิ์ที่ให้สิทธิ์การเข้าถึงแบบอ่านอย่างเดียว (role=reader) แก่ผู้ใช้ที่เฉพาะเจาะจง (type=user) ในขณะที่สิทธิ์อื่นให้สิทธิ์แก่สมาชิกของกลุ่มที่เฉพาะเจาะจง (type=group) ในการเพิ่มความคิดเห็นในไฟล์ (role=commenter)
ดูรายการบทบาททั้งหมดและการดำเนินการที่แต่ละบทบาทอนุญาตได้ที่บทบาท และสิทธิ์
วิธีเผยแพร่สิทธิ์
สิทธิ์จะแพร่กระจายลงมาจากโฟลเดอร์หลักไปยังรายการย่อยทั้งหมด ดังนี้
- รับช่วงโดยค่าเริ่มต้น: ไฟล์และโฟลเดอร์ย่อยทั้งหมดจะรับช่วงสิทธิ์จากโฟลเดอร์หลักโดยอัตโนมัติ
- ลดสิทธิ์ในรายการย่อยไม่ได้: คุณจะนำออกหรือลดสิทธิ์ที่ได้รับ ในรายการย่อยไม่ได้ โดยต้องทำการเปลี่ยนแปลงในโฟลเดอร์หลักต้นทาง หรือโฟลเดอร์ต้องใช้การตั้งค่าการเข้าถึงแบบจำกัด
- ขยายได้ในรายการย่อย: รายการย่อยสามารถให้บทบาทที่มีสิทธิ์มากกว่าได้ เช่น การให้สิทธิ์
role=writerในไฟล์ภายในโฟลเดอร์ที่ผู้ใช้มีสิทธิ์role=reader - ประเมินใหม่เมื่อย้าย: การย้ายรายการไปยังโฟลเดอร์หลักใหม่จะประเมินใหม่ และใช้สิทธิ์ของโฟลเดอร์หลักใหม่กับรายการและรายการย่อย
ลิงก์ไฟล์และการควบคุมการเข้าถึง
เมื่อคุณแชร์ไฟล์หรือโฟลเดอร์กับผู้ใช้หรือกลุ่มที่เฉพาะเจาะจง URL สำหรับเข้าถึง
รายการจะไม่เปลี่ยนแปลง และระบบจะไม่สร้างลิงก์ที่ไม่ซ้ำกันสำหรับผู้ใช้แต่ละราย
แต่จะมีลิงก์เดียวที่คงที่ตาม fileId
ไดรฟ์จะควบคุมการเข้าถึงโดยการประเมิน ACL ของรายการ เมื่อผู้ใช้ พยายามเปิดลิงก์ ไดรฟ์จะยืนยันตัวตนที่ผ่านการตรวจสอบสิทธิ์ ของผู้ใช้กับ ACL หากมีการเพิกถอนสิทธิ์หรือสิทธิ์หมดอายุ ระบบจะนำผู้ใช้ออกจาก ACL หากผู้ใช้พยายามเข้าชมลิงก์ อีกครั้ง ไดรฟ์จะปฏิเสธการเข้าถึง
ทำความเข้าใจความสามารถของไฟล์
ทรัพยากร permissions จะกำหนดผู้ที่มีสิทธิ์เข้าถึง (ACL) แต่ไม่ได้ระบุโดยตรงว่าผู้ใช้ปัจจุบันสามารถ
ดำเนินการที่เฉพาะเจาะจงใน UI ของแอปพลิเคชันได้หรือไม่
แต่ทรัพยากร files จะมีคอลเล็กชันของฟิลด์บูลีน capabilities (เช่น canComment, canShare หรือ canDelete) ที่ Google Drive API คำนวณแบบไดนามิกตามบทบาทของผู้ใช้และการตั้งค่ารายการ
รับความสามารถของไฟล์
เมื่อแสดงผล UI ของแอป ให้ตรวจสอบ files.capabilities แทนที่จะแยกวิเคราะห์
สิทธิ์โดยตรง
- เรียกใช้เมธอด
files.getด้วยfields=capabilitiesดูข้อมูลเพิ่มเติมได้ที่ แสดงผลฟิลด์ที่เฉพาะเจาะจง - ใช้ค่าสถานะบูลีนที่ส่งคืนเพื่อเปิดหรือปิดใช้การดำเนินการที่เกี่ยวข้องใน
อินเทอร์เฟซของคุณ เช่น ปิดใช้การแสดงความคิดเห็นหาก
canCommentเป็นfalse
สถานการณ์การแชร์ทรัพยากรในไดรฟ์
ตารางต่อไปนี้แสดงบทบาทและเงื่อนไขที่จำเป็นสำหรับการแชร์ ทรัพยากรในไดรฟ์ในสถานที่ต่างๆ และรายการประเภทต่างๆ
| ตำแหน่ง | รายการ | บทบาทที่จำเป็น | ข้อจำกัดหลัก |
|---|---|---|---|
| ไดรฟ์ของฉัน | ไฟล์หรือโฟลเดอร์ | owner หรือ writer |
ต้องใช้ owner หาก writersCanShare=falseการทำให้สิทธิ์การเข้าถึงที่มีวันหมดอายุในโฟลเดอร์ต้องใช้ reader (ดูกำหนดวันที่หมดอายุ) |
| ไดรฟ์ที่แชร์ | ไฟล์ | organizer, fileOrganizer หรือ writer |
ระบบจะถือว่า writersCanShare เป็น true เสมอ |
| ไดรฟ์ที่แชร์ | โฟลเดอร์ | organizer |
fileOrganizer ยังแชร์ได้ด้วยหาก sharingFoldersRequiresOrganizerPermission เป็น false |
| ไดรฟ์ที่แชร์ | การเป็นสมาชิก | organizer |
ใช้กับ user หรือ group เท่านั้น (ไม่ใช่โดเมน) |
จัดการสิทธิ์
ตารางต่อไปนี้จะสรุปวิธีการที่ใช้ได้ในแหล่งข้อมูล permissions
| วิธีการ | ปลายทาง API | พารามิเตอร์สำคัญ | ข้อมูลอ้างอิง |
|---|---|---|---|
| สร้าง | POST https://www.googleapis.com/drive/v3/files/{fileId}/permissions |
role type emailAddress หรือdomain |
permissions.create |
| รับ | GET https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} |
fields |
permissions.get |
| List | GET https://www.googleapis.com/drive/v3/files/{fileId}/permissions |
pageSize, supportsAllDrives, pageToken |
permissions.list |
| อัปเดต | PATCH https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} |
role, allowFileDiscovery |
permissions.update |
| ลบ | DELETE https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} |
supportsAllDrives |
permissions.delete |
สร้างสิทธิ์
หากต้องการแชร์ไฟล์ โฟลเดอร์ หรือไดรฟ์ที่แชร์ ให้เรียกใช้เมธอด
create ในแหล่งข้อมูล
permissions ด้วย fileId
การสร้างสิทธิ์จะเพิ่มรายการ ACL ใหม่ลงในรายการและแสดงผล permissionId ที่กำหนด
ในเนื้อหาของคำขอ ให้ระบุช่องต่อไปนี้
role: ระดับการเข้าถึง ที่จะให้ (เช่นreader,commenterหรือwriter) ดูรายการทั้งหมดได้ที่บทบาทและสิทธิ์type: ขอบเขต ของผู้รับเงินช่วยเหลือ (user,group,domainหรือanyone)- ตัวระบุผู้รับเงิน (ต้องระบุตาม
type)emailAddress: ต้องระบุเมื่อtypeเป็นuserหรือgroupdomainต้องระบุเมื่อtypeเป็นdomain
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้างสิทธิ์ การตอบกลับจะแสดงผลอินสแตนซ์ของทรัพยากร permissions รวมถึง permissionId ที่กำหนด
คำขอ
POST https://www.googleapis.com/drive/v3/files/FILE_ID/permissions{ "role": "commenter", "type": "user", "emailAddress": "alex@altostrat.com" }
การตอบกลับ
{
"kind": "drive#permission",
"id": "PERMISSION_ID",
"type": "user",
"role": "commenter"
}แชร์กับกลุ่มเป้าหมาย
กลุ่มเป้าหมายคือกลุ่มคน เช่น แผนกหรือทีมที่คุณแนะนำให้ผู้ใช้แชร์ไฟล์ด้วยได้ คุณสามารถกระตุ้นให้ผู้ใช้แชร์ รายการกับกลุ่มเป้าหมายที่เจาะจงและจำกัดมากขึ้นแทนการแชร์กับทั้ง องค์กรได้ กลุ่มเป้าหมายช่วยเพิ่มความปลอดภัยและความเป็นส่วนตัวของข้อมูล และช่วยให้ผู้ใช้แชร์ได้อย่างเหมาะสมง่ายขึ้น
หากต้องการแชร์กับกลุ่มเป้าหมาย ให้ตั้งค่า type=domain และตั้งค่า domain เป็น
<TARGET_AUDIENCE_ID>.audience.googledomains.com ดูรายละเอียดเกี่ยวกับการค้นหาหรือ
สร้างกลุ่มเป้าหมายในคอนโซลผู้ดูแลระบบของ Google ได้ที่หัวข้อเกี่ยวกับกลุ่ม
เป้าหมาย
หากต้องการดูว่าผู้ใช้โต้ตอบกับกลุ่มเป้าหมายอย่างไร โปรดดูประสบการณ์ของผู้ใช้สําหรับการแชร์ลิงก์
รับสิทธิ์
หากต้องการรับสิทธิ์ ให้เรียกใช้เมธอด get
ในทรัพยากร permissions โดยใช้พารามิเตอร์เส้นทาง
fileId และ permissionId หากไม่ทราบรหัสสิทธิ์
ให้แสดงรายการสิทธิ์ทั้งหมดก่อน
สิทธิ์ในการแสดงรายการ
หากต้องการแสดงรายการสิทธิ์สำหรับไฟล์ โฟลเดอร์ หรือไดรฟ์ที่แชร์ ให้เรียกใช้เมธอด
list ในแหล่งข้อมูล
permissions โดยใช้พารามิเตอร์เส้นทาง
fileIdที่จำเป็น
คุณสามารถใส่ พารามิเตอร์การค้นหาที่ไม่บังคับต่อไปนี้เพื่อแบ่งหน้าหรือ กรองการตอบกลับ
pageSize(ไม่บังคับ): จำนวนสิทธิ์สูงสุดที่จะแสดงต่อหน้าเว็บ หากไม่ได้ตั้งค่าสำหรับไฟล์ในไดรฟ์ที่แชร์ ระบบจะแสดงผลลัพธ์สูงสุด 100 รายการ หากไม่ได้ตั้งค่าสำหรับไฟล์ที่ไม่ได้อยู่ในไดรฟ์ที่แชร์ ระบบจะแสดงรายการทั้งหมดpageToken(ไม่บังคับ): โทเค็นหน้าจากรายการที่เรียกก่อนหน้าเพื่อดึงข้อมูล หน้าถัดไปsupportsAllDrives(ไม่บังคับ): แอปที่ขอรองรับทั้งไดรฟ์ของฉัน และไดรฟ์ที่แชร์หรือไม่useDomainAdminAccess(ไม่บังคับ): ตั้งค่าเป็นtrueเพื่อส่งคำขอในฐานะ ผู้ดูแลระบบโดเมน ผู้ขอจะได้รับสิทธิ์เข้าถึงหากfileIdพารามิเตอร์อ้างอิงถึงไดรฟ์ที่แชร์และผู้ขอเป็นผู้ดูแลระบบของ โดเมนที่ไดรฟ์ที่แชร์เป็นของโดเมนนั้น ดูข้อมูลเพิ่มเติมได้ที่หัวข้อจัดการไดรฟ์ที่แชร์ในฐานะผู้ดูแลระบบโดเมนincludePermissionsForView(ไม่บังคับ): สิทธิ์เพิ่มเติมในการดูเพื่อ รวมไว้ในการตอบกลับ รองรับpublishedเท่านั้นfields(ไม่บังคับ): ฟิลด์ที่เฉพาะเจาะจงที่จะแสดงในคำตอบ โดยค่าเริ่มต้นlistจะแสดงผลเฉพาะid,type,kindและroleหากต้องการแสดงช่องเพิ่มเติม (เช่นpermissionDetails) ให้ระบุช่องเหล่านั้นโดยใช้พารามิเตอร์นี้ ดูข้อมูลเพิ่มเติมได้ที่ส่งคืนฟิลด์ที่เฉพาะเจาะจง
กำหนดแหล่งที่มาของบทบาท
หากต้องการเปลี่ยนบทบาทในไฟล์หรือโฟลเดอร์ คุณต้องทราบแหล่งที่มาของบทบาท สำหรับไดรฟ์ที่แชร์ แหล่งที่มาของบทบาทอาจอิงตามการเป็นสมาชิกของไดรฟ์ที่แชร์ บทบาทในโฟลเดอร์ หรือบทบาทในไฟล์
หากต้องการกำหนดแหล่งที่มาของบทบาทสำหรับไดรฟ์ที่แชร์หรือรายการภายในไดรฟ์นั้น ให้เรียกใช้เมธอด get ในแหล่งข้อมูล permissions ที่มีพารามิเตอร์เส้นทาง fileId และ permissionId รวมถึงพารามิเตอร์ fields ที่ตั้งค่าเป็นฟิลด์ permissionDetails
หากต้องการค้นหา permissionId ให้ใช้วิธี list ในแหล่งข้อมูล permissions
ที่มีพารามิเตอร์เส้นทาง fileId หากต้องการดึงข้อมูลฟิลด์ permissionDetails
ในคำขอ list ให้ตั้งค่าพารามิเตอร์ fields เป็น
permissions/permissionDetails
ฟิลด์นี้จะแสดงสิทธิ์ของไฟล์ทั้งหมดที่รับช่วงมาและสิทธิ์โดยตรงสำหรับผู้ใช้ กลุ่ม หรือโดเมน
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีระบุแหล่งที่มาของบทบาท การตอบกลับจะแสดงผล permissionDetails ของทรัพยากร permissions ฟิลด์ inheritedFrom จะระบุรหัสของรายการที่สิทธิ์รับค่ามา
คำขอ
GET https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID?fields=permissionDetails&supportsAllDrives=true
การตอบกลับ
{
"permissionDetails": [
{
"permissionType": "member",
"role": "commenter",
"inheritedFrom": "INHERITED_FROM_ID",
"inherited": true
},
{
"permissionType": "file",
"role": "writer",
"inherited": false
}
]
}อัปเดตสิทธิ์
หากต้องการอัปเดตสิทธิ์ในไฟล์หรือโฟลเดอร์ คุณสามารถเปลี่ยนบทบาทที่กำหนดได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับการค้นหาแหล่งที่มาของบทบาทได้ที่ระบุแหล่งที่มาของบทบาท
เรียกใช้เมธอด
updateในทรัพยากรpermissionsโดยตั้งค่าพารามิเตอร์fileIdpath เป็นไฟล์ โฟลเดอร์ หรือไดรฟ์ที่แชร์ที่เชื่อมโยง และตั้งค่าพารามิเตอร์permissionIdpath เป็นสิทธิ์ที่จะเปลี่ยน หากต้องการค้นหาpermissionIdให้ใช้วิธีlistในแหล่งข้อมูลpermissionsที่มีพารามิเตอร์เส้นทางfileIdระบุ
roleใหม่ในคำขอ
คุณสามารถให้สิทธิ์ในไฟล์หรือโฟลเดอร์แต่ละรายการในไดรฟ์ที่แชร์ได้ แม้ว่าผู้ใช้หรือกลุ่มจะเป็นสมาชิกอยู่แล้วก็ตาม
เช่น อเล็กซ์มี role=commenter
เป็นส่วนหนึ่งของการเป็นสมาชิกไดรฟ์ที่แชร์ อย่างไรก็ตาม แอปของคุณสามารถให้สิทธิ์ Alex
role=writer สำหรับไฟล์ในไดรฟ์ที่แชร์ได้ ในกรณีนี้ เนื่องจากบทบาทใหม่
มีสิทธิ์มากกว่าบทบาทที่ได้รับผ่านการเป็นสมาชิก สิทธิ์ใหม่
จึงกลายเป็นบทบาทที่มีผลสำหรับไฟล์หรือโฟลเดอร์
คุณใช้การอัปเดตผ่านความหมายของแพตช์ได้ ซึ่งหมายความว่าคุณสามารถแก้ไขทรัพยากรบางส่วนได้ คุณต้องตั้งค่าฟิลด์ที่ต้องการ แก้ไขในคำขออย่างชัดเจน ฟิลด์ที่ไม่ได้รวมไว้ในคำขอจะยังคงมีค่าเดิม ดูข้อมูลเพิ่มเติมได้ที่การทำงานกับทรัพยากรบางส่วน
นอกจากการเปลี่ยนบทบาทแล้ว คุณยังแก้ไขการค้นพบของรายการได้เมื่อสิทธิ์ type เป็น domain หรือ anyone หากต้องการทำให้ไฟล์ที่แชร์
ค้นหาได้หรือไม่มีในรายการ ให้รวมฟิลด์บูลีน allowFileDiscovery
ไว้ในคำขอแพตช์ การตั้งค่านี้เป็น true จะช่วยให้รายการปรากฏใน
ผลการค้นหาสำหรับกลุ่มเป้าหมายที่ระบุได้ แม้ว่ากลุ่มเป้าหมายจะยังไม่ได้รับ
ลิงก์โดยตรงก็ตาม คุณไม่จำเป็นต้องลบและสร้างสิทธิ์ใหม่เพื่อเปลี่ยนการตั้งค่านี้
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเปลี่ยนสิทธิ์ในไฟล์หรือโฟลเดอร์จาก commenter เป็น writer การตอบกลับจะแสดงผลอินสแตนซ์ของทรัพยากร permissions
คำขอ
PATCH https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID
{
"role": "writer"
}การตอบกลับ
{
"kind": "drive#permission",
"id": "PERMISSION_ID",
"type": "user",
"role": "writer"
}อัปเดตสิทธิ์หลายรายการด้วยคำขอแบบกลุ่ม
ระบบไม่รองรับการแก้ไขสิทธิ์พร้อมกันในไฟล์ โฟลเดอร์ หรือไดรฟ์ที่แชร์เดียวกัน ข้อจำกัดนี้มีผลกับการดำเนินการที่เปลี่ยนแปลงทั้งหมด (เช่น การอัปเดตหรือการลบ) ไม่ว่าคุณจะแก้ไขสิทธิ์สำหรับผู้รับรายเดียวกันหรือผู้รับหลายราย และไม่ว่าคำขอจะมาจากแอปเดียวหรือผู้ใช้หลายรายก็ตาม
ไดรฟ์จะประเมินและอัปเดตสิทธิ์ของรายการเป็น ACL เดียว
การดำเนินการพร้อมกันทำให้เกิดสภาวะการแข่งขันที่ "การเขียนครั้งสุดท้ายชนะ"
ซึ่งอาจเขียนทับการเปลี่ยนแปลงสิทธิ์โดยไม่แจ้งเตือนหรือทริกเกอร์ข้อผิดพลาด
sharingRateLimitExceeded
หากต้องการหลีกเลี่ยงความขัดแย้ง ให้ดำเนินการเปลี่ยนแปลงสิทธิ์ในรายการเดียวกันตามลำดับ หรือใช้คำขอแบบกลุ่มเพื่อแก้ไขสิทธิ์หลายรายการในคำขอเดียว
ตัวอย่างต่อไปนี้แสดงการแก้ไขสิทธิ์แบบเป็นชุดด้วยไลบรารีของไคลเอ็นต์
Java
Python
Node.js
PHP
.NET
ลบสิทธิ์
หากต้องการเพิกถอนสิทธิ์เข้าถึงไฟล์หรือโฟลเดอร์ ให้เรียกใช้เมธอด
delete ในแหล่งข้อมูล
permissions ที่มีพารามิเตอร์เส้นทาง fileId และ
permissionId
คุณจะเพิกถอนสิทธิ์ที่รับช่วงมาในรายการย่อยโดยตรงไม่ได้ อัปเดตหรือ ลบสิทธิ์ในโฟลเดอร์หลักแทน (หรือใช้การตั้งค่าการเข้าถึงแบบจำกัด)
โปรดทราบว่าการนำสิทธิ์เข้าถึงของผู้ใช้ออกจากรายการหลักจะเพิกถอนเฉพาะสิทธิ์ที่รับช่วงมาจากรายการหลักนั้น
หากผู้ใช้ได้รับสิทธิ์โดยตรงในรายการย่อยด้วย สิทธิ์เข้าถึงโดยตรงนั้นจะยังคงมีผล หากต้องการยืนยันว่าได้นำสิทธิ์ออกแล้ว ให้เรียกใช้ list ด้วย fileId
กำหนดวันที่หมดอายุ
หากต้องการให้สิทธิ์เข้าถึงไฟล์หรือโฟลเดอร์ชั่วคราว ให้ตั้งค่าฟิลด์
expirationTime (วันที่และเวลาตาม RFC 3339) เมื่อเรียกใช้เมธอด create หรือ update
เวลาหมดอายุมีข้อจำกัดดังนี้
- ตั้งค่าได้เฉพาะในสิทธิ์
userและgroup(ไม่ใช่domainหรือanyone) - เวลาต้องเป็นเวลาในอนาคต โดยไม่เกิน 1 ปี
- สำหรับโฟลเดอร์ ระบบจะรองรับการเข้าถึงชั่วคราวเฉพาะบทบาท
reader
หัวข้อที่เกี่ยวข้อง
- จัดการข้อเสนอการเข้าถึงที่รอดำเนินการ
- จัดการโฟลเดอร์ที่มีสิทธิ์เข้าถึงแบบจำกัดและแบบขยาย
- โอนการเป็นเจ้าของไฟล์
- ปกป้องเนื้อหาในไฟล์
- เข้าถึงไฟล์ในไดรฟ์ที่แชร์ด้วยลิงก์โดยใช้คีย์ทรัพยากร
- บทบาทและสิทธิ์