Получение прошлых прав доступа к файлу через скрипт API / Apps - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь создать список файлов, хранящихся на моем Google Диске, а также список их текущих и предыдущих разрешений. В частности, я хочу создать список файлов на моем Google Диске, для которых в любой момент в прошлом были права доступа «Любой пользователь, имеющий ссылку, может просматривать / редактировать (et c)».

I Для этого я создал скрипт Служб Google, и я могу пройтись по всем файлам, и я могу получить файлы, которые в настоящее время имеют этот набор разрешений, но я не вижу способа получить историю разрешений файла.

Я нашел и активировал API списка ревизий: https://developers.google.com/drive/api/v2/reference/revisions/list

Он получает ревизии, но я нигде не вижу, чтобы в нем отображалась история совместного использования ревизии.

Возможно ли то, что я пытаюсь сделать?

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Это определенно возможно при использовании Drive Activity API . Вы можете использовать Quickstart для скрипта Google Apps, чтобы просмотреть все действия элемента (файла или папки) или выполненные пользователем. В этом случае я изменил Quickstart, чтобы показать изменения прав доступа для данного идентификатора диска.

function listDriveActivity() {
  var request = {
     itemName: "items/1bFQvSJ8pMdss4jInrrg7bxdae3dKgu-tJqC1A2TktMs", //Id of the file
    pageSize: 10};
  var response = DriveActivity.Activity.query(request);
  var activities = response.activities;

  if (activities && activities.length > 0) {
    Logger.log('Recent activity:');

      for (var i = 0; i < activities.length; i++) {
      var activity = activities[i];
      var time = getTimeInfo(activity);
      var action = getActionInfo(activity.primaryActionDetail);
      var actors = activity.actors.map(getActorInfo);
      var targets = activity.targets.map(getTargetInfo);

      if (action == "permissionChange"){ //Only show permissionChange activity
      Logger.log(
          '%s: %s, %s, %s', time, truncated(actors), action,
          truncated(targets));
      }
    }
  } else {
    Logger.log('No activity.');
  }
}

/** Returns a string representation of the first elements in a list. */
function truncated(array, opt_limit) {
  var limit = opt_limit || 2;
  var contents = array.slice(0, limit).join(', ');
  var more = array.length > limit ? ', ...' : '';
  return '[' + contents + more + ']';
}

/** Returns the name of a set property in an object, or else "unknown". */
function getOneOf(object) {
  for (var key in object) {
    return key;
  }
  return 'unknown';
}

/** Returns a time associated with an activity. */
function getTimeInfo(activity) {
  if ('timestamp' in activity) {
    return activity.timestamp;
  }
  if ('timeRange' in activity) {
    return activity.timeRange.endTime;
  }
  return 'unknown';
}

/** Returns the type of action. */
function getActionInfo(actionDetail) {
  return getOneOf(actionDetail);
}

/** Returns user information, or the type of user if not a known user. */
function getUserInfo(user) {
  if ('knownUser' in user) {
    var knownUser = user.knownUser;
    var isMe = knownUser.isCurrentUser || false;
    return isMe ? 'people/me' : knownUser.personName;
  }
  return getOneOf(user);
}

/** Returns actor information, or the type of actor if not a user. */
function getActorInfo(actor) {
  if ('user' in actor) {
    return getUserInfo(actor.user)
  }
  return getOneOf(actor);
}

/** Returns the type of a target and an associated title. */
function getTargetInfo(target) {
  if ('driveItem' in target) {
    var title = target.driveItem.title || 'unknown';
    return 'driveItem:"' + title + '"';
  }
  if ('drive' in target) {
    var title = target.drive.title || 'unknown';
    return 'drive:"' + title + '"';
  }
  if ('fileComment' in target) {
    var parent = target.fileComment.parent || {};
    var title = parent.title || 'unknown';
    return 'fileComment:"' + title + '"';
  }
  return getOneOf(target) + ':unknown';
}

Не забудьте включить API активности диска в разделе Ресурсы> Расширенные службы Google

В моем примере это возвращает журналы:


enter image description here


Вы также можете заглянуть глубже в Разрешения с помощьюmissionChange Параметры в запросе.

0 голосов
/ 06 февраля 2020

Если у вас есть учетная запись предприятия / предприятия / edu, журналы аудита администратора сообщат вам об этом за 6 месяцев данных. Или он по крайней мере скажет вам, когда разрешение было изменено с x на y.

Не могу придумать метод для личного использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...