Saya menginstal skrip Vidar dan bekerja sangat baik untuk file, tetapi tidak akan mengatur ulang izin pada folder. Jadi, saya mengubah sedikit kode untuk membuat folder juga mewarisi izin dari folder atas mereka.
Dua penafian penting:
- Saya tidak tahu apakah maksud awalnya adalah membiarkan folder tidak berubah. Atau bahkan jika itu bekerja dengan baik untuk semua orang kecuali saya, dan solusi ini tidak perlu dilakukan. Ini berhasil untuk saya.
- Ini adalah skrip pertama yang saya lakukan, jadi sangat mungkin skrip ini tidak terlalu efisien dan mungkin mengandung beberapa kesalahan. Silakan memperbaikinya dan memperbaikinya.
Saya hanya mengubah doResetPermissions
fungsinya, tetapi saya menempelkan semua kode untuk alasan kesederhanaan.
var selectedFolder;
var dialog;
function doGet() {
var app = UiApp.createApplication();
var heading = app.createHTML("<h1>Folders for</h1>");
app.add(heading);
var allFoldersIterator = DriveApp.getFolders();
var text = app.createTextArea().setName("text").setId("output");
app.add(text);
var tree = app.createTree();
var rootFolder = DriveApp.getRootFolder();
var treeRoot = app.createTreeItem(rootFolder.getName()).setId(rootFolder.getId());
var handler = app.createServerHandler("folderSelected");
tree.addItem(treeRoot);
tree.addSelectionHandler(handler);
treeRoot.setState(true);
createBranch(rootFolder, treeRoot, app);
app.add(tree);
var selectedFolderIdBox = app.createTextBox().setName("selectedFolderIdBox").setId("selectedFolderIdBox");
app.add(selectedFolderIdBox);
return app;
}
function createBranch(folder, branch, app) {
var children = folder.getFolders();
while (children.hasNext()) {
child = children.next();
Logger.log("Folder id: " + child.getId());
var subBranch = app.createTreeItem(child.getName()).setId(child.getId());
branch.addItem(subBranch);
createBranch(child, subBranch, app);
}
}
function folderSelected(eventInfo) {
var app = UiApp.getActiveApplication();
var parameter = eventInfo.parameter;
Logger.log("Selected " + eventInfo.parameter.selected);
selectedFolder = DriveApp.getFolderById(eventInfo.parameter.selected);
var selectedFolderIdBox = app.getElementById("selectedFolderIdBox");
selectedFolderIdBox.setValue(eventInfo.parameter.selected);
var okHandler = app.createServerHandler("okResetPermissions");
okHandler.addCallbackElement(selectedFolderIdBox);
dialog = app.createDialogBox(true, true);
var panel = app.createFlowPanel();
dialog.add(panel);
dialog.setId("confirmationDialog");
dialog.setPopupPosition(100, 100).setSize(500, 500);
panel.add(app.createLabel("Do you want to reset permissions for all files found in folder " + selectedFolder.getName() + " and its subfolders?\n (Click outside of the dialog box to cancel)"));
panel.add(app.createButton("Do it!", okHandler));
dialog.show();
return app;
}
function okResetPermissions(eventInfo) {
var selectedFolderId = eventInfo.parameter.selectedFolderIdBox;
var selectedFolder = DriveApp.getFolderById(selectedFolderId);
Logger.log("Resetting permissions on " + selectedFolder.getName());
var app = UiApp.getActiveApplication();
app.getElementById("confirmationDialog").hide();
Logger.log("Confirmation dialog hidden");
var progressIndicator = app.createDialogBox(false, true);
progressIndicator.setId("progressIndicator");
progressIndicator.setPopupPosition(100, 100).setSize(500, 500);
var label = app.createLabel("Working ...");
progressIndicator.add(label);
progressIndicator.show();
doResetPermissions(selectedFolder, function() {
var app = UiApp.getActiveApplication();
var progressIndicator = app.getElementById("progressIndicator");
progressIndicator.hide();
return app;
});
return app;
}
function doResetPermissions(selectedFolder, callback) {
Logger.log("Resetting permissions on folder " + selectedFolder.getName());
var sharingAccess = selectedFolder.getSharingAccess();
var sharingPermission = selectedFolder.getSharingPermission();
var viewersfolder = selectedFolder.getViewers();
Logger.log("Number of Viewers in folder: " + selectedFolder.getName() + " = " + viewersfolder.length);
for (var i = 0; i < viewersfolder.length; i++) {
Logger.log(" Removing viewer " + viewersfolder[i].getEmail());
selectedFolder.removeViewer(viewersfolder[i]);
}
var editorsfolder = selectedFolder.getEditors();
Logger.log("Number of Editors in folder: " + selectedFolder.getName() + " = " + editorsfolder.length);
for (var i = 0; i < editorsfolder.length; i++) {
Logger.log(" Removing editor " + editorsfolder[i].getEmail());
selectedFolder.removeEditor(editorsfolder[i]);
}
var files = selectedFolder.getFiles();
while (files.hasNext()) {
var file = files.next();
Logger.log(" Resetting permissions on file " + file.getName());
file.setSharing(sharingAccess, sharingPermission);
var viewers = file.getViewers();
Logger.log("Number of Viewers in file: " + file.getName() + " = " + viewers.length);
for (var i = 0; i < viewers.length; i++) {
Logger.log(" Removing viewer " + viewers[i].getEmail());
file.removeViewer(viewers[i]);
}
var editors = file.getEditors();
Logger.log("Number of editors in file: " + file.getName() + " = " + editors.length);
for (var i = 0; i < editors.length; i++) {
Logger.log(" Removing editor " + editors[i].getEmail());
file.removeEditor(editors[i]);
}
}
var children = selectedFolder.getFolders();
while (children.hasNext()) {
var child = children.next();
doResetPermissions(child);
}
if (callback) {
callback();
}
}
Jika saya perlu mengatur ulang izin folder, saya mengganti nama folder ( Keuangan → Keuangan_1 ), membuat folder baru dengan nama lama ( Keuangan ), dan "memindahkan" semua sub-folder ke folder baru.
Dengan langkah ini, Anda mengatur ulang semua izin untuk subfolder.
sumber
Saya telah membuat webapp Skrip Google Apps yang harusnya dekat dengan yang Anda inginkan.
PENTING! Sebelum menjalankan ini di salah satu folder Anda, pastikan Anda mengujinya di akun lain. Meskipun skrip tampaknya berfungsi sebagaimana dimaksud, saya tidak dapat membuat jaminan bahwa skrip tersebut tidak akan mengacaukan izin Anda. Jadi telusuri skrip dengan hati-hati, periksa dokumentasi untuk Skrip Google Apps , dan ujilah dengan seksama sebelum menjalankan data produksi apa pun.
UI skrip sangat sederhana, jadi jangan kecuali sesuatu yang mewah.
Untuk menginstal skrip ini, buka Google Drive Anda dan klik New → Google Apps Script . Rekatkan dalam kode, dan Terbitkan → Distribusikan sebagai aplikasi web .
Setel skrip ke Jalankan sebagai pengguna yang masuk (atau serupa, Google Drive saya tidak dalam bahasa Inggris) .
Saat menjalankan aplikasi, Anda akan diperlihatkan hierarki folder dari Google Drive Anda. Mengklik pada sebuah folder akan menampilkan popup yang tampak jelek, di mana Anda dapat memilih untuk menjalankan skrip reset izin untuk folder dan subfoldernya (fungsi
doResetPermissions
dalam kode).Fungsi ini berulang melalui folder dan subfoldernya. Untuk setiap file yang ditemukannya, dijalankan
file.setSharing
dengan nilai dari folder induk. Itu juga panggilanfile.removeViewer
untuk semua pemirsa terdaftar, danfile.removeEditor
untuk semua editor terdaftar.Periksa dokumentasi untuk removeViewer dan hapusEditor untuk memastikan mereka melakukan apa yang Anda inginkan.
Perhatikan bahwa menjalankan skrip mungkin memakan waktu (tergantung pada ukuran struktur folder Anda), dan tidak ada umpan balik yang diberikan saat berfungsi, kecuali dalam log pelari skrip ( Lihat → Log ).
sumber
Saya menemukan bahwa cara terbaik adalah menggunakan
rclone copy
untuk membuat ulang folder induk dengan semua file-nya, sambil mengubah izin menjadi pengaturan berbagi default apa pun yang Anda pilih.Jadi jika sudah, katakan drive tim dengan banyak direktori, cukup pindahkan semuanya ke folder baru seperti bad_permissions. Kemudian buat remote baru di rclone untuk drive itu dan gunakan
rclone copy gdrive:bad_permissions gdrive:fixed_permissions
. Karena penyalinan terjadi di sisi server, Anda tidak perlu mengunduh / mengunggah.PERINGATAN : Saya memeriksa folder yang disalin dengan alat perbandingan file setelah itu untuk memastikan semuanya telah ditransfer dengan benar dan rclone benar-benar telah melewatkan sejumlah besar file tanpa menampilkan kesalahan.
sumber
http://gappstips.com/docs-tips/view/98/protect-your-google-drive-folders-by-setting-permissions
menurut tautan itu sepertinya Anda perlu memastikan file-file tersebut disetel ke izin default maka mereka harus mewarisi dari folder tersebut.
edit: ctrl + a memilih semua file dalam folder maka Anda dapat mengubah dengan siapa mereka dibagikan sekaligus.
sumber