google-apps-script - 通过 API/Apps 脚本获取文件的过去权限
问题描述
我正在尝试创建存储在我的 Google Drive 中的文件列表,以及它们当前和以前的权限列表。具体来说,我想在我的 Google Drive 中创建一个文件列表,这些文件在过去的任何时候都拥有“任何有链接的人都可以查看/编辑(等)”权限集。
我已经创建了一个 Google Apps 脚本来执行此操作,并且可以遍历所有文件,并且可以获取当前具有该权限集的文件,但是我看不到获取文件权限历史记录的方法。
我找到并激活了修订列表 API:https ://developers.google.com/drive/api/v2/reference/revisions/list
这会得到修订,但我在任何地方都看不到它列出了修订的共享历史。
我正在尝试做的事情可能吗?
解决方案
绝对可以使用Drive Activity API。您可以使用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';
}
记得在 Resources > Advanced Google Services 中启用 Drive Activity API
在我的示例中,这将返回日志:
您还可以通过使用查询中的 permissionChange参数来更深入地查看权限。
推荐阅读
- java - 如何在borderlayout北区放置两个Jpanels/Jbuttons?
- c++ - 在 c++ 中将 str[str.size()-1] 转换为整数?
- python - 计算试验次数以获得唯一性
- r - 在具有混合类型的 data.frame 中查找包含值的列数
- pyspark - 如何在 spark sql 中使用 type1 实现 scd type 2
- postgresql - Hasura @skip where 查询条件
- python - 从字典和列表中获取所有可能的组合
- xpath - 如何从此 URL 中提取“最后更新”日期到谷歌表格
- sql - 如何将数组作为参数传递给nodejs中sap-hdbext-promisfied的statementExecPromisified(statement,[])函数?
- angular - 全局注册自定义 Angular 材质图标(即使使用延迟加载模块)