質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

988閲覧

GoogleDriveの共有設定を一括で初期化する方法

316198492

総合スコア11

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2022/04/04 22:35

編集2022/04/05 09:11

こんにちは。

私が管理者となっている共有フォルダ内にあるsubfolderについて、
暫定的に複数のメンバー(対象者)に閲覧権限を付与し、作業完了後にその対象者に閲覧権限を削除して、共有先を管理者(私)とコンテンツ管理者だけにリセットしたいと考えております。
"TypeError: folder.getowner is not a function”というメッセージが出てしまいます。
ownerをadminなどに変えても同じエラーメッセージが表示されます。

以下のコードでなくてもよいので分かる方いらっしゃいましたら教えていただけますと幸いです。どうぞよろしくお願いいたします。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
function changeAccessControl(folderId) {
const folder = DriveApp.getFolderById("10qgEigvHfRKKHT_ZbAemZ0oAWr7tfDcA");

const me = Session.getActiveUser().getEmail();
if ( me !== folder.getOwner().getEmail() ) {
throw new Error(あなたは [${folder.getName()}] [${folder.getUrl()}] のファイルのオーナーでは無いため、処理を中断します);
}

const sharingAccess = folder.getSharingAccess();
folder.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE);

const editors = folder.getEditors();
for (const editor of editors) {
folder.removeEditor(editor);
}

const viewers = folder.getViewers();
for (const viewer of viewers) {
folder.removeViewer(viewer);
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーメッセージにあるように「folder.getowner is not a function」ようは
folder.getownerなんて関数は見つからないというエラーです。

https://developers.google.com/apps-script/reference/drive/folder#getowner
こちらにあるようにgetownerではなくgetOwnerじゃないですか?

投稿2022/04/05 02:42

YAmaGNZ

総合スコア10542

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

316198492

2022/04/05 09:13

ありがとうございます。 おっしゃる通り、Ownerに修正して実行処理しましたが、やはり動きませんでした。 共有ドライブでの初期化作業になりますので、少し修正してみたものの、やはり共有ドライブに 暫定的に共有設定されている対象者は削除されませんでした。。。。。 function changeAccessControl(folderId) { var folder = DriveApp.getFolderById("1Z-4su9GxJvNyCVNT8ty4Kgpqzhpt6cFB"); const currentUser = Session.getActiveUser().getEmail(); const userPermission= folder.getAccess(currentUser); if (DriveApp.Permission.ORGANIZER != userPermission) { throw new Error("Your permission is not enough to running this script."); } var sharingAccess = folder.getSharingAccess(); folder.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE); var editors = folder.getEditors(); for (var editor of editors) { folder.removeEditor(editor); } var viewers = folder.getViewers(); for (var viewer of viewers) { folder.removeViewer(viewer); } }
YAmaGNZ

2022/04/05 10:44

動かないというのはエラーが出て動作しないということでしょうか、それとも正常終了するのに権限が変更されていないということでしょうか? 一応提示されたソースを動作させたところ、パーミッションがDriveApp.Permission.ORGANIZERとは判断されなかったのでDriveApp.Permission.OWNERに変更しましたがアクセスできるユーザーが複数人になっている状態から共有なしになりました。
316198492

2022/04/06 03:53

えっ、Ownerを使って共有ドライブで初期化を自動化できました?ありがとうございます。やってみたいと思います。
YAmaGNZ

2022/04/06 05:02

実験として自アカウントのMyDriveの変更でしたのでOwnerでしかアカウントの権限判断ができませんでした。 共有ドライブ使用時のアカウントの権限判断とは異なると思います。 ただ、ファイルやフォルダのremoveEditorやremoveViewerの動作としては差があるのか判断できませんでしたので提示ソースの実行でエラーとならないかの確認を行ったという感じです。
316198492

2022/04/06 05:30

正常終了するのに権限が変更されていないという意味で申し上げました。
316198492

2022/04/06 05:45

共有ドライブだと難易度高いと感じております。 remove editor/viewerをどう修正すれば動くか、 分からずに苦戦しております。
YAmaGNZ

2022/04/06 05:52

リファレンスの説明として https://developers.google.com/apps-script/reference/drive/folder#removeeditoruser にある This method doesn't block users from accessing the Folder if they belong to a class of users who have general access—for example, if the Folder is shared with the user's entire domain, or if the Folder is in a shared drive that the user can access. の部分がちょっとひっかかります。
316198492

2022/04/06 06:10

やはりshared driveの場合は難しいのでしょうかね。。。 まだあきらめきれませんが。
316198492

2022/04/06 06:15

共有フォルダの管理者、コンテンツ管理者以外のアクセス権を削除する処理を目指しております。
316198492

2022/04/06 06:20 編集

このように一部変えてもアクセス権は削除されませんでした。 エラーは出ませんでしたが。 function changeAccessControl(folderId) { var folder = DriveApp.getFolderById("1Z-4su9GxJvNyCVNT8ty4Kgpqzhpt6cFB"); const currentUser = Session.getActiveUser().getEmail(); const userPermission= folder.getAccess(currentUser); if (DriveApp.Permission.ORGANIZER != userPermission) { throw new Error("Your permission is not enough to running this script."); } var sharingAccess = folder.getSharingAccess(); folder.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE); var editors = folder.getEditors(); for (var editor of editors) { folder.removeEditor(editor); } var viewers = folder.getViewers(); for (var viewer of viewers) { folder.removeViewer(viewer); } }
316198492

2022/04/06 06:40

知り合いから、「フォルダ移動時に権限を継承しないのであれば、明示的に削除処理を書く必要があるので、 getViewers()とremoveViewer()とかを組み合わせて使ってみる感じになりますね。 」というアドバイスをいただいたのですが、既に入れてあるのですよね。。。。(最後の2段落)
YAmaGNZ

2022/04/06 06:41

念のための確認なのですが、folder.getEditorsにて正常にユーザーを取得できているのですよね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問