【问题标题】:Getting past permissions for a file through the API/Apps Script通过 API/Apps 脚本获取文件的过去权限
【发布时间】:2020-02-06 15:34:30
【问题描述】:

我正在尝试创建存储在我的 Google 云端硬盘中的文件列表,以及他们当前和以前的权限列表。具体来说,我想在我的 Google Drive 中创建一个文件列表,这些文件在过去的任何时候都拥有“任何拥有链接的人都可以查看/编辑(等)”权限集。

我创建了一个 Google Apps 脚本来执行此操作,我可以遍历所有文件 OK,我可以获取当前具有该权限集的文件,但我看不到获取文件权限历史记录的方法.

我找到并激活了修订列表 API:https://developers.google.com/drive/api/v2/reference/revisions/list

这会获取修订,但我在任何地方都看不到它列出了修订的共享历史。

我正在尝试做的事情可能吗?

【问题讨论】:

    标签: google-apps-script google-drive-api


    【解决方案1】:

    绝对可以使用Drive Activity API。您可以使用 Quickstart for Google Apps 脚本来查看项目(文件或文件夹)的所有活动或由用户完成的活动。在这种情况下,我修改了快速入门以显示给定驱动器 ID 的权限更改。

    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';
    }
    

    记得在资源 > 高级 Google 服务中启用 Drive Activity API

    在我的示例中,这将返回日志:



    您还可以通过在查询中使用 permissionChange Parameters 来更深入地查看权限。

    【讨论】:

      【解决方案2】:

      如果您有商业/企业/教育帐户,管理员审核日志会告诉您 6 个月的数据。或者它至少会告诉您权限何时从 x 更改为 y。

      想不出个人的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-06
        • 1970-01-01
        • 1970-01-01
        • 2019-06-17
        相关资源
        最近更新 更多