I am trying to get the list of users of have access (Edit, Comment, View ...) for a TeamDrive Root Folder not a TeamDrive file.
First try :
var folders = Drive.Teamdrives.list({
pageSize:100,
pageToken:folderPT
});
for (var i = 0; i < folders.items.length; i++)
{
var folder = folders.items[i];
var teamDrive = Drive.Teamdrives.get(folder.id);
var test = DriveApp.getFolderById(folder.id);
Logger.log(test.getEditors());
}
With which methods I have to work ? Is it possible to do this ?
The response from my code is only empty results:
[18-09-05 14:18:36:282 CEST] []
[18-09-05 14:18:36:771 CEST] []
[18-09-05 14:18:37:143 CEST] []
[18-09-05 14:18:37:625 CEST] []
[18-09-05 14:18:38:306 CEST] []
[18-09-05 14:18:38:690 CEST] []
Edit : In fact the code above is working, my test folder was empty. But the answer below is better.
You can use a file to determine the permissions set on the file itself or inherited from the Team Drive.
You can do this via the Permissions
namespace within Drive
.
function getFilePermissions(fileId) {
var permissions = Drive.Permissions.list(fileId, {supportsTeamDrives:true,
corpora: 'teamDrive',
includeTeamDriveItems: true})
.items
.reduce(function(all, i){
var role = i.teamDrivePermissionDetails.map(function(permission){
// commenters are flagged as having an additional role as readers
var activeRole = (i.additionalRoles) ? i.additionalRoles[0] : permission.role;
return {emailAddress: i.emailAddress,
teamDrivePermissionType: permission.teamDrivePermissionType,
role: activeRole};
});
return all.concat(role);
}, []);
return permissions;
}
This function reduces the amount of information returned by the Permissions.list
call to return an object array from which you can ascertain a whole bunch of information. A single user could be a reader of the Team Drive but a Writer (editor) of the file itself, this function returns both permissions.
e.g.
[
{
"emailAddress": "geoff@example.com",
"teamDrivePermissionType": "member", <-- a Team Drive permission
"role": "organizer" <-- an Team Drive domain member
},
{
"emailAddress": "jonathon@example.com",
"teamDrivePermissionType": "member",
"role": "writer" <-- a non-Domain member
},
{
"emailAddress": "jonathon@example.com",
"teamDrivePermissionType": "file",
"role": "writer" <-- editor set on the file share
},
{
"emailAddress": "svea@example.com",
"teamDrivePermissionType": "file",
"role": "reader" <-- viewing rights set at file level
},
{
"emailAddress": "info@example.com",
"teamDrivePermissionType": "member",
"role": "organizer"
},
{
"emailAddress": "rebekkah@example.com",
"teamDrivePermissionType": "file",
"role": "commenter" <-- this is a reader with comment rights
}
]
Filter it by member
or file
(non-member), or by role: reader, writer, etc..
For more information on the Permissions object schema check here: Permissions Resource