当前位置: 首页 > 知识库问答 >
问题:

通过API/Apps脚本获取文件的权限

胡志
2023-03-14

我正在尝试创建一个存储在我的谷歌硬盘中的文件列表,以及它们当前和以前的权限列表。具体地说,我想在我的谷歌硬盘中创建一个文件列表,在过去的任何时候都有“任何人都可以查看/编辑(etc)”权限集。

我已经创建了一个谷歌应用脚本来做到这一点,我可以迭代所有的文件,我可以得到当前具有该权限集的文件,但是我看不到获取文件权限历史的方法。

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

这得到了修订,但我看不到它列出修订的共享历史的任何地方。

我试图做的事情可能吗?

共有2个答案

东郭远航
2023-03-14

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

个人想不出办法。

燕烨
2023-03-14

使用驱动器活动API绝对是可能的。您可以使用Quickstart for Google Apps脚本查看项目(文件或文件夹)或用户完成的所有活动。在本例中,我修改了Quickstart以显示给定驱动器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';
}

请记住在参考资料中启用驱动器活动API

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

您还可以通过使用查询中的permissionChange参数更深入地查看权限。

 类似资料:
  • 我正在构建一个数据库,我希望它能托管在一个Fusion表中,我正在开发一些与Fusion API接口的测试函数。我正在使用谷歌应用程序脚本,并且在很大程度上依赖于其他源代码。我花了一天的大部分时间研究这个问题,现在我陷入了困境。 当在脚本编辑器中运行addNewColsta()时,它会进入“获取准备就绪”日志条目(正如我在日志中看到的那样),然后它会经历身份验证过程(每次),然后就停止(并且永远不

  • 我使用了以下代码, 这会引发错误“表达式不是合法表达式”。“代码:“12”nsresult:“0x805b0033(SyntaxError)”位置:”“]”。 当我缩小搜索范围到 它工作正常,我得到了特定行中的所有文本。然而,当我将其扩展到特定于第1个代码中所示的列时,我得到了错误。 html代码段,

  • 我正在尝试从网页复制一个文本元素并在我的控制台中打印它,作为对未来项目的测试。 这些是我收到错误时的行: 错误是这样的: 然后我的chomedrive关闭了。有什么问题?

  • 我想通过打开一个文件来获得一个文件路径,该文件选择由start ActivityForResult,其意图是意图。ACTION_GET_CONTENT和setType(* / *), 但是当我选择打开“Nexus 5X”项时,返回uri是“com.android.externalstorage.documents”,如何处理这种类型uri。有一些代码。 截图

  • 问题内容: 如果我有PHP脚本,如何从该脚本内部获取文件名? 另外,给定表单脚本的名称,我如何仅提取“ jquery.js”部分? 问题答案: 只需使用PHP魔术常数 即可获取当前文件名。 但是似乎您想要没有的部分。所以… 一个更通用的文件扩展名去除器如下所示… 如您所料,使用标准的字符串库函数要快得多。

  • 问题内容: 我想编写一个脚本将文件上传到FTP。 登录系统将如何工作?我正在寻找这样的东西: 以及任何其他登录凭据。 问题答案: 使用,您可以这样编写: 如果FTP主机需要TLS,请改用。 要检索它,可以使用: 编辑 : 要查找当前目录,请使用: FTP.pwd():返回服务器上当前目录的路径名。 要更改目录,请使用: FTP.cwd(pathname):设置服务器上的当前目录。