4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GASを使ってGoogle Drive内のフォルダ、ファイルの権限をチェックする

Posted at

DevRel/Asia 2020というカンファレンスを企画、推進しています。

DevRel/Asia 2020

アジア9カ国/地域の主催者たちと一緒に行っているのですが、データの管理はGoogle Driveで行っています。基本的に最初のディレクトリに全員書き込み権限ありで追加しているだけなのですが、人の入れ替わりなどもあって、だんだんと管理が煩雑になってきました。

そこで、特定のフォルダ以下の権限状態がどうなっているのかチェックするGoogle Apps Scriptを書いてみました。Drive Permissions AuditorとかWhoHasAccess.commorimorihoge/google-drive-permission-search: Search Google Drive's permissionDriveCheckerなどがあるっぽいんですが、Google Drive全体がやりたい訳でもないし、お金払うほどでもないし(コミュニティイベントだし)、google-drive-permission-searchは動かないし…。

コードはこんな感じ。フォルダを取得して権限チェックして、フォルダも同じようにチェックして…って感じでたいしたことはしていないです。

function permissionCheker(prefix = null, id = '1mK...AdH') {
  // 出力先のシート
  const sheet = SpreadsheetApp.getActive().getSheetByName('Files');
  // フォルダを取得
  const folder = DriveApp.getFolderById(id);
  // ファイルだけ取得
  const files = folder.getFiles();
  // 順番にチェック
  while (files.hasNext()) {
    writeRow(sheet, prefix, files.next());
  }
  // 中にあるフォルダを取得
  const folders = folder.getFolders();
  // 順番にチェック
  while (folders.hasNext()) {
    // フォルダを取得
    const sub = folders.next();
    writeRow(sheet, prefix, sub);
    // 再帰的に実行
    permissionCheker(`${prefix || ""}/${folder.getName()}/${sub.getName()}`, sub.getId());
  }
}

function writeRow(sheet, prefix, obj) {
  let rowIndex = sheet.getLastRow() + 1;
  // フォルダパスを出力
  sheet.getRange(rowIndex, 1).setValue(prefix ? `${prefix}/${obj.getName()}` : '');
  // ファイル名を出力
  sheet.getRange(rowIndex, 2).setValue(obj.getName());
  // 権限を持った人たちをリストアップ
  const editors = obj.getEditors();
  if (editors.length === 0) return;

  // 権限を持った人数を出力
  sheet.getRange(rowIndex, 3).setValue(editors.length);
  // 権限を持った人の名前を出力
  sheet.getRange(rowIndex, 4).setValue(editors.map(a => a.getName()).join(","));  
}

今回の目的ではとりあえず人数さえ分かっていればだいたい判断ができて、もし削除し忘れた人がいてもスプレッドシートの検索でどうにかなるので、こんな感じで十分でした。

ScreenShot_ 2020-08-24 11.28.26.png

主催者は一覧で管理しているので、権限の付与や剥奪についてもGoogle Apps Scriptでやれば楽そうだなって感じました。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?