代码之家  ›  专栏  ›  技术社区  ›  PSAB Plalangan

如何使用应用程序脚本仅为域中的用户设置文件访问权限

  •  0
  • PSAB Plalangan  · 技术社区  · 2 年前

    我在谷歌硬盘里有一些文件和文件夹。我想用应用程序脚本设置访问权限。 我在sheetDatabase中放入了访问设置,单元格“K3”带有数据验证选项:“ARRANED”和“UNREGULED”。我的组织的域名是guru.smk.belajar.id( 我希望以后能改 ),我把它放在“K4”单元格中。

    为了设置文件/文件夹访问权限,我创建了应用程序脚本,但我无法设置有域地址限制的用户访问权限。 可以设置具有域(@sampledomain.com)地址限制的用户访问(不仅仅是用户( [email protected] ) ?

     function updatePermissions() {
    
        var domainSetting = sheetDatabase.getRange('K3').getValue();
        var domain        = sheetDatabase.getRange('K4').getValue(); // As a sample, my domain was @guru.smk.belajar.id
    
        Logger.log("Domain "+domain)
    
     // Set Folder Share Access  
        var folderAplikasiPklID = sheetSetting.getRange(6, 3).getValue(); //  Folder ID
        var folder = DriveApp.getFolderById(folderAplikasiPklID);
    
     // Set Spreadsheet Share Access
        var spreadsheetID = sheetSetting.getRange(7, 3).getValue(); // Spreadsheet ID
        var ssJurnalPKL = DriveApp.getFileById(spreadsheetID);
    
       if (domainSetting === 'ARRANGED') {
    // Set folder to view only by domain users
      folder.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.VIEW);
      folder.addViewers(domain);
    
    // Set file to edit only by users in the specified domain
     ssJurnalPKL.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.VIEW); // Restrict to private first
     var viewers = ssJurnalPKL.getViewers();
     for (var i = 0; i < viewers.length; i++) {
         ssJurnalPKL.removeViewer(viewers[i]);
     }
     var editors = ssJurnalPKL.getEditors();
         for (var i = 0; i < editors.length; i++) {
         ssJurnalPKL.removeEditor(editors[i]);
     }
     ssJurnalPKL.addEditors(domain); // Give Editor Access to User in  domain
    
      } else if (domainSetting === 'UNREGULATED') {
    // Set file to edit by anyone with the link
       ssJurnalPKL.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);
     }
    
      Logger.log('Permissions updated successfully.');
      };
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Tanaike    2 年前

    为了授予域权限,使用驱动器API。示例脚本如下所示。

    示例脚本:

    在测试此脚本之前,请在高级Google服务中启用Drive API v3。

    const fileId = "###"; // <--- Please set your file ID.
    const resource = {
      role: "writer",
      type: "domain",
      domain: "###" // <--- Please set your domain.
    };
    Drive.Permissions.create(resource, fileId, { supportsAllDrives: true });
    
    • 如果的值 role 与您的实际情况不同,请修改。
    • 如果您想包含更多属性,可以在 the official document .
    • 如果的文件 fileId 不包含在共享驱动器中,您可以删除 supportsAllDrives: true .

    参考