Вы можете перечислить Права доступа к файлу диска, а также вы можете перебрать через файлы папки. Затем вам нужно будет получить каждое из разрешений, чтобы получить EmailAddress
и Role
.
Я предполагаю, что вы используете Java, поэтому, если мы посмотрим на Быстрый запуск , мы можем использовать его для установки учетных данных и токенов для скрипта и игнорирования остальной части кода.
public class DrivePerms {
private static final String APPLICATION_NAME = "Google Drive API Java Quickstart";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String TOKENS_DIRECTORY_PATH = "tokens";
/**
* Global instance of the scopes required by this quickstart.
* If modifying these scopes, delete your previously saved tokens/ folder.
*/
private static final List<String> SCOPES = Collections.singletonList(DriveScopes.DRIVE);
private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
/**
* Creates an authorized Credential object.
* @param HTTP_TRANSPORT The network HTTP Transport.
* @return An authorized Credential object.
* @throws IOException If the credentials.json file cannot be found.
*/
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
// Load client secrets.
InputStream in = DrivePerms.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
if (in == null) {
throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
}
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
.setAccessType("offline")
.build();
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}
Обратите внимание, что я пропустил «импорт», вы можете использовать те из Quickstart. Кроме того, Scopes установлены на .Drive вместо .DRIVE_METADATA_READONLY .
В основном классе я объявляю HTT_TRANSPORT и службу Drive ( как в Quickstart):
public static void main(String... args) throws IOException, GeneralSecurityException {
// Build a new authorized API client service.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
Затем:
- Список файлов папки
FileList result = service.files().list()
.setFields("nextPageToken, files(id, name)")
.setQ("'your folder Id' in parents")
.execute();
List<File> files = result.getFiles();
Получить
Список разрешений для каждого файла
for (File file : files){
System.out.println("File: " + file.getName());
PermissionList result2 = service.permissions().list(file.getId())
.execute();
List<Permission> permsList = result2.getPermissions();
Получите каждое разрешение из списка разрешений и распечатайте результаты:
for (Permission perms : permsList){
Permission roles = service.permissions().get(file.getId(), perms.getId())
.setFields("emailAddress, role")
.execute();
System.out.println("Email: " + roles.getEmailAddress());
System.out.println("Role: " + roles.getRole());
System.out.println("-----------------------------------");
}
}
}
Надеюсь, это полезно!