如何将电子表格的访问权限从“编辑器”更改为“查看器”?

时间:2018-09-16 22:03:33

标签: google-apps-script google-sheets access

这是编辑器运行的电子表格中的脚本:

function ed2view() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var eds = ss.getEditors();
  var ed = eds[1];
  ss.removeEditor(ed);
  ss.addViewer(ed);
}

它不起作用,因为很显然,到addViewer()时,权限已被撤销。

如果只是addViewer(),而没有以前的removeEditor(),则也无法正常工作:If the user was already on the list of editors, this method has no effect

另一方面,通过电子表格的界面,编辑者可以降低其对查看器的访问权限。

请告知如何正确更改访问权限。

2 个答案:

答案 0 :(得分:0)

如果您想让编辑者更改其他编辑者的状态,请尝试以下操作:

SELECT (regexp_split_to_array(fans.device_info, ';'))[1] as device

在您的代码中,您尝试将function ed2view() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var editorArray = ss.getEditors(); var userMail = editorArray[1].getEmail(); ss.removeEditor(editorArray[1]); ss.addViewer(userMail); } 中的User对象而不是string类型的电子邮件地址作为参数传递

如果您是编辑者而不是所有者,并且您想很好地使用App Script更改权限状态,那么您仍然不能,但编辑者仍可以进入电子表格的共享设置并将其权限状态更改为“已读” -only”,然后确认。

不幸的是,您无法以编程方式进行操作。

答案 1 :(得分:0)

如果您不通过电子表格文件操纵访问,而是使用高级驱动器服务,则该任务具有解决方案。

function run() {
  driveChangeMeRole_(FILE_ID, EMAIL);
}

/**
 * Downgrade you in the rights from the editor to the viewer
 * @param {string} fileId The file id
 * @param {string} email You can pass your email and downgrade youself
 * @returns {void}
 */
function driveChangeMeRole_(fileId, email) {
  var permissionId = Drive.Permissions.getIdForEmail(email);
  var resource = Drive.newPermission();
  resource.role = 'reader';
  /* You can stay as a commenter
  resource.additionalRoles = ['commenter']; */
  Drive.Permissions.update(resource, fileId, permissionId.id);
}

您需要在Google API Console中启用Drive API:脚本编辑器:资源/高级功能。 该任务由@oshilaer here

决定