Mỗi tệp, thư mục và bộ nhớ dùng chung trên Google Drive đều có các tài nguyên permissions
được liên kết. Mỗi tài nguyên xác định quyền cho một type
cụ thể (user
, group
, domain
, anyone
) và role
(owner
, organizer
, fileOrganizer
, writer
, commenter
, reader
). Ví dụ: một tệp có thể có quyền cấp cho một người dùng cụ thể (type=user
) quyền truy cập chỉ đọc (role=reader
), trong khi một quyền khác cấp cho các thành viên của một nhóm cụ thể (type=group
) khả năng thêm nhận xét vào một tệp (role=commenter
).
Để xem danh sách đầy đủ các vai trò và những thao tác được phép thực hiện đối với từng vai trò, hãy tham khảo phần Vai trò và quyền.
Cách hoạt động của quyền
Danh sách quyền của một thư mục sẽ được truyền xuống. Tất cả tệp và thư mục con đều kế thừa quyền từ thư mục mẹ. Bất cứ khi nào quyền hoặc hệ thống phân cấp thay đổi, quá trình truyền quyền sẽ diễn ra đệ quy thông qua tất cả các thư mục lồng nhau. Ví dụ: nếu một tệp nằm trong một thư mục và thư mục đó được di chuyển vào một thư mục khác, thì các quyền đối với thư mục mới sẽ được truyền đến tệp. Nếu thư mục mới cấp cho người dùng tệp một vai trò mới, chẳng hạn như "người viết", thì vai trò đó sẽ ghi đè vai trò cũ của họ.
Ngược lại, nếu một tệp kế thừa role=writer
từ một thư mục và được di chuyển sang một thư mục khác có vai trò "người đọc", thì tệp đó sẽ kế thừa role=reader
.
Bạn không thể xoá các quyền được thừa kế khỏi tệp hoặc thư mục trong bộ nhớ dùng chung. Thay vào đó, bạn phải điều chỉnh các quyền này trên mục chính trực tiếp hoặc gián tiếp mà các quyền này được kế thừa. Bạn có thể xoá các quyền được kế thừa khỏi các mục trong "Drive của tôi" hoặc "Được chia sẻ với tôi".
Ngược lại, bạn có thể ghi đè các quyền được kế thừa trên một tệp hoặc thư mục trong Drive của tôi. Do đó, nếu một tệp kế thừa role=writer
từ một thư mục trong phần My Drive, bạn có thể đặt role=reader
cho tệp đó để giảm cấp độ quyền.
Tìm hiểu các chức năng của tệp
Tài nguyên permissions
không xác định khả năng thực hiện các thao tác của người dùng hiện tại đối với một tệp hoặc thư mục.
Thay vào đó, tài nguyên files
chứa một tập hợp các trường capabilities
boolean dùng để cho biết liệu có thể thực hiện một thao tác trên tệp hoặc thư mục hay không. Google Drive API đặt các trường này dựa trên tài nguyên quyền của người dùng hiện tại được liên kết với tệp hoặc thư mục.
Ví dụ: khi Alex đăng nhập vào ứng dụng của bạn và cố gắng chia sẻ một tệp, vai trò của Alex sẽ được kiểm tra để xem có quyền đối với tệp đó hay không. Nếu vai trò cho phép họ chia sẻ một tệp, thì capabilities
liên quan đến tệp đó, chẳng hạn như canShare
, sẽ được điền sẵn theo vai trò. Nếu Alex muốn chia sẻ tệp, ứng dụng của bạn sẽ kiểm tra capabilities
để đảm bảo canShare
được đặt thành true
.
Để biết ví dụ về cách truy xuất tệp capabilities
, hãy xem phần Lấy các chức năng của tệp.
Lấy các chức năng của tệp
Khi mở một tệp, ứng dụng của bạn nên kiểm tra các chức năng của tệp và hiển thị giao diện người dùng để phản ánh các quyền của người dùng hiện tại. Ví dụ: nếu người dùng không có khả năng canComment
đối với tệp, thì khả năng nhận xét sẽ bị vô hiệu hoá trong giao diện người dùng.
Để kiểm tra các chức năng, hãy gọi phương thức get()
trên tài nguyên files
bằng tham số đường dẫn fileId
và tham số fields
được đặt thành trường capabilities
. Để biết thêm thông tin về các trường trả về bằng cách sử dụng tham số fields
, hãy xem phần Trả về các trường cụ thể.
Mã mẫu sau đây cho biết cách xác minh quyền của người dùng. Phản hồi này trả về danh sách các quyền mà người dùng có đối với tệp. Mỗi chức năng tương ứng với một hành động chi tiết mà người dùng có thể thực hiện. Một số trường chỉ được điền sẵn cho các mục trong bộ nhớ dùng chung.
Yêu cầu
GET https://www.googleapis.com/drive/v3/files/FILE_ID
?fields=capabilities
Đáp
{ "capabilities": { "canAcceptOwnership": false, "canAddChildren": false, "canAddMyDriveParent": false, "canChangeCopyRequiresWriterPermission": true, "canChangeItemDownloadRestriction": true, "canChangeSecurityUpdateEnabled": false, "canChangeViewersCanCopyContent": true, "canComment": true, "canCopy": true, "canDelete": true, "canDisableInheritedPermissions": false, "canDownload": true, "canEdit": true, "canEnableInheritedPermissions": true, "canListChildren": false, "canModifyContent": true, "canModifyContentRestriction": true, "canModifyEditorContentRestriction": true, "canModifyOwnerContentRestriction": true, "canModifyLabels": true, "canMoveChildrenWithinDrive": false, "canMoveItemIntoTeamDrive": true, "canMoveItemOutOfDrive": true, "canMoveItemWithinDrive": true, "canReadLabels": true, "canReadRevisions": true, "canRemoveChildren": false, "canRemoveContentRestriction": false, "canRemoveMyDriveParent": true, "canRename": true, "canShare": true, "canTrash": true, "canUntrash": true } }
Các trường hợp chia sẻ tài nguyên trên Drive
Có 5 loại tình huống chia sẻ:
Để chia sẻ một tệp trong Drive của tôi, người dùng phải có quyền
role=writer
hoặcrole=owner
.Nếu giá trị boolean
writersCanShare
được đặt thànhfalse
cho tệp, thì người dùng phải córole=owner
.Nếu người dùng có
role=writer
có quyền truy cập tạm thời theo ngày và giờ hết hạn, thì họ sẽ không thể chia sẻ tệp. Để biết thêm thông tin, hãy xem bài viết Đặt ngày hết hạn để hạn chế quyền truy cập vào tệp.
Để chia sẻ một thư mục trong Drive của tôi, người dùng phải có quyền
role=writer
hoặcrole=owner
.Nếu giá trị boolean
writersCanShare
được đặt thànhfalse
cho tệp, thì người dùng phải córole=owner
có nhiều quyền hơn.Bạn không được cấp quyền truy cập tạm thời (theo ngày và giờ hết hạn) cho các thư mục trong Drive của tôi có biểu tượng
role=writer
. Để biết thêm thông tin, hãy xem bài viết Đặt ngày hết hạn để hạn chế quyền truy cập vào tệp.
Để chia sẻ tệp trong bộ nhớ dùng chung, người dùng phải có quyền
role=writer
,role=fileOrganizer
hoặcrole=organizer
.- Chế độ cài đặt
writersCanShare
không áp dụng cho các mục trong bộ nhớ dùng chung. Hệ thống sẽ coi như bạn luôn đặt giá trị này thànhtrue
.
- Chế độ cài đặt
Để chia sẻ một thư mục trong bộ nhớ dùng chung, người dùng phải có quyền
role=organizer
.- Nếu chế độ hạn chế
sharingFoldersRequiresOrganizerPermission
đối với bộ nhớ dùng chung được đặt thànhfalse
, thì người dùng córole=fileOrganizer
có thể chia sẻ thư mục trong bộ nhớ dùng chung đó.
- Nếu chế độ hạn chế
Để quản lý tư cách thành viên của bộ nhớ dùng chung, người dùng phải có quyền
role=organizer
. Chỉ người dùng và nhóm mới có thể là thành viên của bộ nhớ dùng chung.
Tạo một quyền
Bạn cần có 2 trường sau đây khi tạo quyền:
type
:type
xác định phạm vi quyền (user
,group
,domain
hoặcanyone
). Quyền cótype=user
áp dụng cho một người dùng cụ thể, trong khi quyền cótype=domain
áp dụng cho mọi người trong một miền cụ thể.role
: Trườngrole
xác định các thao tác màtype
có thể thực hiện. Ví dụ: quyền cótype=user
vàrole=reader
sẽ cấp cho một người dùng cụ thể quyền truy cập chỉ đọc vào tệp hoặc thư mục. Hoặc, quyền có biểu tượngtype=domain
vàrole=commenter
cho phép mọi người trong miền thêm nhận xét vào một tệp. Để xem danh sách đầy đủ các vai trò và thao tác được phép của từng vai trò, hãy tham khảo phần Vai trò và quyền.
Khi tạo một quyền có type=user
hoặc type=group
, bạn cũng phải cung cấp một emailAddress
để liên kết người dùng hoặc nhóm cụ thể với quyền đó.
Khi tạo một quyền mà type=domain
, bạn cũng phải cung cấp một domain
để liên kết một miền cụ thể với quyền.
Cách tạo quyền:
- Sử dụng phương thức
create()
với tham số đường dẫnfileId
cho tệp hoặc thư mục được liên kết. - Trong phần nội dung yêu cầu, hãy chỉ định
type
vàrole
. - Nếu là
type=user
hoặctype=group
, hãy cung cấpemailAddress
. Nếutype=domain
, hãy cung cấpdomain
.
Đoạn mã mẫu sau đây cho biết cách tạo một quyền. Phản hồi này trả về một thực thể của tài nguyên Permission
, bao gồm cả permissionId
được chỉ định.
Yêu cầu
POST https://www.googleapis.com/drive/v3/files/FILE_ID
/permissions
{ "requests": [ { "type": "user", "role": "commenter", "emailAddress": "alex@altostrat.com" } ] }
Đáp
{
"kind": "drive#permission",
"id": "PERMISSION_ID
",
"type": "user",
"role": "commenter"
}
Sử dụng đối tượng mục tiêu
Đối tượng mục tiêu là các nhóm người (chẳng hạn như các bộ phận hoặc nhóm) mà bạn có thể đề xuất cho người dùng để chia sẻ các mục của họ. Bạn có thể khuyến khích người dùng chia sẻ các mục với một nhóm đối tượng cụ thể hoặc hạn chế hơn thay vì toàn bộ tổ chức. Đối tượng mục tiêu có thể giúp bạn cải thiện tính bảo mật và quyền riêng tư của dữ liệu, đồng thời giúp người dùng chia sẻ dữ liệu một cách phù hợp dễ dàng hơn. Để biết thêm thông tin, hãy xem bài viết Giới thiệu về đối tượng mục tiêu.
Cách sử dụng đối tượng mục tiêu:
Trong Bảng điều khiển dành cho quản trị viên của Google, hãy chuyển đến phần Trình đơn > Thư mục > Đối tượng mục tiêu.
Để thực hiện việc này, bạn phải đăng nhập bằng tài khoản có đặc quyền quản trị viên cấp cao.
Trong Danh sách đối tượng mục tiêu, hãy nhấp vào tên của đối tượng mục tiêu. Để tạo đối tượng mục tiêu, hãy xem phần Tạo đối tượng mục tiêu
Sao chép mã nhận dạng riêng biệt từ URL đối tượng mục tiêu:
https://admin.google.com/ac/targetaudiences/ID
.Tạo một quyền bằng
type=domain
và đặt trườngdomain
thànhID.audience.googledomains.com
.
Để xem cách người dùng tương tác với đối tượng mục tiêu, hãy xem phần Trải nghiệm người dùng khi chia sẻ đường liên kết.
Liệt kê tất cả các quyền
Sử dụng phương thức list()
trên tài nguyên permissions
để truy xuất tất cả các quyền đối với một tệp, thư mục hoặc bộ nhớ dùng chung.
Đoạn mã mẫu sau đây cho biết cách lấy tất cả các quyền. Phản hồi này trả về danh sách các quyền.
Yêu cầu
GET https://www.googleapis.com/drive/v3/files/FILE_ID
/permissions
Đáp
{
"kind": "drive#permissionList",
"permissions": [
{
"id": "PERMISSION_ID
",
"type": "user",
"kind": "drive#permission",
"role": "commenter"
}
]
}
Cập nhật quyền
Để cập nhật quyền đối với một tệp hoặc thư mục, bạn có thể thay đổi vai trò được chỉ định. Để biết thêm thông tin về cách tìm nguồn vai trò, hãy xem phần Xác định nguồn vai trò.
Gọi phương thức
update()
trên tài nguyênpermissions
với tham số đường dẫnpermissionId
được đặt thành quyền thay đổi và tham số đường dẫnfileId
được đặt thành tệp, thư mục hoặc bộ nhớ dùng chung được liên kết. Để tìmpermissionId
, hãy sử dụng phương thứclist()
trên tài nguyênpermissions
bằng tham số đường dẫnfileId
.Trong yêu cầu, hãy xác định
role
mới.
Bạn có thể cấp quyền cho từng tệp hoặc thư mục trong bộ nhớ dùng chung ngay cả khi người dùng hoặc nhóm đó đã là thành viên. Ví dụ: Alex có role=commenter
trong gói thành viên của bộ nhớ dùng chung. Tuy nhiên, ứng dụng của bạn có thể cấp quyền cho Alex role=writer
đối với một tệp trong bộ nhớ dùng chung. Trong trường hợp này, vì vai trò mới có nhiều quyền hơn vai trò được cấp thông qua tư cách thành viên, nên quyền mới sẽ trở thành vai trò có hiệu lực đối với tệp hoặc thư mục.
Đoạn mã sau đây cho thấy cách thay đổi quyền đối với một tệp hoặc thư mục từ người nhận xét thành người viết. Phản hồi này trả về một thực thể của tài nguyên permissions
.
Yêu cầu
PATCH https://www.googleapis.com/drive/v3/files/FILE_ID
/permissions/PERMISSION_ID
{ "requests": [ { "role": "writer" } ] }
Đáp
{
"kind": "drive#permission",
"id": "PERMISSION_ID
",
"type": "user",
"role": "writer"
}
Xác định nguồn vai trò
Để thay đổi vai trò đối với một tệp hoặc thư mục, bạn phải biết nguồn gốc của vai trò đó. Đối với bộ nhớ dùng chung, nguồn của vai trò có thể dựa trên tư cách thành viên của bộ nhớ dùng chung, vai trò trên thư mục hoặc vai trò trên tệp.
Để xác định nguồn vai trò cho một bộ nhớ dùng chung hoặc các mục trong bộ nhớ dùng chung đó, hãy gọi phương thức get()
trên tài nguyên permissions
bằng các tham số đường dẫn fileId
và permissionId
, đồng thời đặt tham số fields
thành trường permissionDetails
.
Để tìm permissionId
, hãy sử dụng phương thức list()
trên tài nguyên permissions
bằng tham số đường dẫn fileId
. Để tìm nạp trường permissionDetails
trên yêu cầu list
, hãy đặt tham số fields
thành permissions/permissionDetails
.
Trường này liệt kê tất cả các quyền trực tiếp và quyền được kế thừa đối với tệp của người dùng, nhóm hoặc miền.
Mẫu mã sau đây cho thấy cách xác định nguồn vai trò. Phản hồi này trả về permissionDetails
của tài nguyên permissions
. Trường inheritedFrom
cung cấp mã nhận dạng của mục mà quyền được kế thừa.
Yêu cầu
GET https://www.googleapis.com/drive/v3/files/FILE_ID
/permissions/PERMISSION_ID
?fields=permissionDetails&supportsAllDrives=true
Đáp
{
"permissionDetails": [
{
"permissionType": "member",
"role": "commenter",
"inheritedFrom": "INHERITED_FROM_ID
",
"inherited": true
},
{
"permissionType": "file",
"role": "writer",
"inherited": false
}
]
}
Cập nhật nhiều quyền bằng các yêu cầu hàng loạt
Bạn nên sử dụng các yêu cầu hàng loạt để sửa đổi nhiều quyền.
Sau đây là ví dụ về cách thực hiện một lần sửa đổi hàng loạt quyền bằng thư viện ứng dụng.
Java
Python
Node.js
PHP
.NET
Xoá một quyền
Để thu hồi quyền truy cập vào một tệp hoặc thư mục, hãy gọi phương thức delete()
trên tài nguyên permissions
với các tham số đường dẫn fileId
và permissionId
được đặt để xoá quyền.
Đối với các mục trong "Drive của tôi", bạn có thể xoá quyền được kế thừa. Khi bạn xoá một quyền được kế thừa, quyền truy cập vào mục và các mục con (nếu có) sẽ bị thu hồi.
Đối với các mục trong bộ nhớ dùng chung, bạn không thể thu hồi các quyền được thừa kế. Thay vào đó, hãy cập nhật hoặc xoá quyền đối với tệp hoặc thư mục mẹ.
Phương thức delete()
cũng được dùng để xoá các quyền được áp dụng trực tiếp cho một tệp hoặc thư mục trên ổ đĩa dùng chung.
Mẫu mã sau đây cho thấy cách thu hồi quyền truy cập bằng cách xoá một permissionId
. Nếu thành công, nội dung phản hồi sẽ trống. Để xác nhận rằng quyền đã bị xoá, hãy dùng phương thức list()
trên tài nguyên permissions
bằng tham số đường dẫn fileId
.
Yêu cầu
DELETE https://www.googleapis.com/drive/v3/files/FILE_ID
/permissions/PERMISSION_ID
Đặt ngày hết hạn để giới hạn quyền truy cập vào tệp
Khi làm việc với những người khác trong một dự án nhạy cảm, bạn có thể muốn hạn chế quyền truy cập của họ vào một số tệp nhất định trong Drive sau một khoảng thời gian. Đối với các tệp trong Drive của tôi, bạn có thể đặt ngày hết hạn để giới hạn hoặc xoá quyền truy cập vào tệp đó.
Cách đặt ngày hết hạn:
Sử dụng phương thức
create()
trên tài nguyênpermissions
và đặt trườngexpirationTime
(cùng với các trường bắt buộc khác). Để biết thêm thông tin, hãy xem phần Tạo quyền.Sử dụng phương thức
update()
trên tài nguyênpermissions
và đặt trườngexpirationTime
(cùng với các trường bắt buộc khác). Để biết thêm thông tin, hãy xem bài viết Cập nhật quyền.
Trường expirationTime
cho biết thời điểm quyền hết hạn bằng cách sử dụng ngày giờ theo RFC 3339. Thời gian hết hạn có các quy tắc hạn chế sau:
- Bạn chỉ có thể đặt thời gian hết hạn cho quyền của người dùng và nhóm.
- Thời gian phải là thời gian trong tương lai.
- Thời gian không được quá một năm nữa.
Để biết thêm thông tin về ngày hết hạn, hãy xem các bài viết sau:
Chủ đề có liên quan
- Quản lý các đề xuất cấp quyền truy cập đang chờ xử lý
- Quản lý thư mục có quyền truy cập bị giới hạn và mở rộng
- Chuyển quyền sở hữu tệp
- Bảo vệ nội dung tệp
- Truy cập vào tệp trong bộ nhớ dùng chung được chia sẻ qua đường liên kết bằng khoá tài nguyên
- Vai trò và quyền