Last active
December 5, 2019 07:22
-
-
Save ryotsun/192e05a69dfe631d1543b0463d87f8b0 to your computer and use it in GitHub Desktop.
【秘伝】Google Drive 権限委譲ツール
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 2017/12/09 | |
* @author ryotsun | |
* 【秘伝】ドライブ権限委譲ツール | |
* 特定フォルダ以下にある自分がオーナーのフォルダとファイル | |
* のオーナー権限を一括で変更するスクリプト | |
* | |
* Usage | |
* 1. ドキュメント、スプレッドシートなどのスクリプトエディタにコードをペーストする | |
* 2. 権限の委譲通知メールを送信しないようにするために Drive API を利用しているので、 | |
「リソース」→「 Google の拡張サービス」→「 Drive API 」を ON にする | |
* 3. Google API Console の方でも「 Drive API 」を Enabled にする | |
* 4. `base_folder_id`, `current_owner`, `new_owner` を設定する | |
* 5. `myFunction()` を実行する | |
* | |
* スクリプトの処理時間が6分を超えるとタイムアウトします。( Apps Script の仕様) | |
* タイムアウト対策はしていないので、対象ファイルが多くなりすぎないように注意して下さい… | |
**/ | |
function myFunction() { | |
var base_folder_id = "XXXXXX"; // 検索対象とするフォルダのID | |
var current_owner = "[email protected]"; // 移譲元オーナー(自分)のメールアドレス | |
var new_owner = "[email protected]"; // 移譲先オーナーのメールアドレス | |
var options = { | |
"body": { | |
"role": "owner", // 付与する権限 | |
"type": "user", | |
"value": new_owner // 付与対象者のメールアドレス | |
}, | |
"others": { | |
"sendNotificationEmails": false // 通知メールを送信するかどうか | |
} | |
}; | |
var parent_folder = DriveApp.getFolderById(base_folder_id); | |
changeOwner(parent_folder, current_owner, options); | |
} | |
function changeOwner(folder, current_owner, options) { | |
var folders = folder.getFolders(); | |
// 自分がオーナーになっているファイルを取得する | |
var files = folder.searchFiles("'me' in owners");; | |
while (files.hasNext()) { | |
var _file = files.next(); | |
// Google のドキュメント以外はスキップ | |
if (mime.match(/google-apps/)) { | |
insertPermission(_file.getId(), options); | |
Logger.log("ファイル名: " + _file.getName()); | |
} else { | |
Logger.log("スキップされました" + _file); | |
} | |
} | |
while (folders.hasNext()) { | |
var _folder = folders.next(); | |
var _owner = _folder.getOwner(); | |
if (_owner.getEmail() == current_owner) { | |
insertPermission(_folder.getId(), options); | |
Logger.log("フォルダ名: " + _folder.getName()); | |
} | |
// フォルダを再帰的に掘っていく | |
changeOwner(_folder, current_owner, options); | |
} | |
} | |
function insertPermission(id, options) { | |
Drive.Permissions.insert(options.body, id, options.others); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment