Instalei o script do Vidar e funciona muito bem para arquivos, mas não redefinia as permissões nas pastas. Então, mudei um pouco o código para fazer com que as pastas também herdam as permissões da pasta superior.
Duas isenções de responsabilidade importantes:
- Não sei se a intenção original era deixar as pastas inalteradas. Ou mesmo que funcionasse bem para todos, menos para mim, e essas soluções eram desnecessárias. Funcionou para mim.
- Este é o primeiro script que eu faço, portanto, é muito provável que não seja muito eficiente e possa conter alguns erros. Por favor, sinta-se livre para corrigi-lo e melhorá-lo.
Mudei apenas a doResetPermissions
função, mas colei todo o código por motivos de simplicidade.
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();
}
}
Se precisar redefinir as permissões da pasta, renomeio a pasta ( Finanças → Finanças_1 ), crie uma nova pasta com o nome antigo ( Finanças ) e "mova" todas as subpastas para a nova pasta.
Com esse movimento, você redefine todas as permissões para subpastas.
fonte
Criei um aplicativo da web de scripts do Google Apps que deve estar próximo do desejado.
IMPORTANTE! Antes de executar isso em qualquer uma de suas pastas, verifique-o em outra conta. Embora o script pareça estar funcionando como planejado, não posso garantir que ele não atrapalhe suas permissões. Portanto, siga o script com cuidado, verifique a documentação dos scripts do Google Apps e teste-o completamente antes de executar qualquer dado de produção.
A interface do usuário do script é muito rudimentar, portanto, exceto algo sofisticado.
Para instalar esse script, acesse o Google Drive e clique em Novo → Script do Google Apps . Cole o código e Publique → Distribuir como aplicativo da web .
Defina o script como Executar como usuário conectado (ou semelhante, meu Google Drive não está em inglês) .
Ao invocar o aplicativo, você verá a hierarquia de pastas do seu Google Drive. Clicar em uma pasta exibirá um pop-up de aparência feia, onde você pode optar por executar um script de redefinição de permissão para a pasta e suas subpastas (a função
doResetPermissions
no código).Essa função percorre a pasta e suas subpastas. Para cada arquivo encontrado, ele é executado
file.setSharing
com valores da pasta pai. Ele também chamafile.removeViewer
todos os espectadores registrados efile.removeEditor
todos os editores registrados.Verifique a documentação do removeViewer e removeEditor para garantir que eles façam o que você deseja.
Observe que a execução do script pode levar algum tempo (dependendo do tamanho da estrutura da pasta) e nenhum feedback é fornecido enquanto estiver funcionando, exceto nos logs do executor de scripts ( Exibir → Logs ).
fonte
Eu descobri que a melhor maneira era usar
rclone copy
para recriar a pasta pai com todos os seus arquivos, enquanto alterava as permissões para as configurações de compartilhamento padrão que você escolheu.Portanto, se você tiver, digamos, uma unidade de equipe com vários diretórios, basta mover tudo para uma nova pasta, como bad_permissions. Em seguida, crie um novo controle remoto no rclone para essa unidade e use
rclone copy gdrive:bad_permissions gdrive:fixed_permissions
. Como a cópia ocorre no servidor, você evita fazer o download / upload.AVISO : Verifiquei a pasta copiada com uma ferramenta de comparação de arquivos posteriormente para garantir que tudo foi transferido corretamente e o rclone realmente perdeu uma quantidade bastante grande de arquivos sem exibir nenhum erro.
fonte
http://gappstips.com/docs-tips/view/98/protect-your-google-drive-folders-by-setting-permissions
de acordo com esse link, parece que você precisa ter certeza de que os arquivos estão definidos com as permissões padrão e que eles devem herdar da pasta.
editar: ctrl + a seleciona todos os arquivos da pasta e você pode alterar com quem eles são compartilhados de uma só vez.
fonte