J'ai installé le script de Vidar et fonctionne très bien pour les fichiers, mais je ne réinitialiserais pas les autorisations sur les dossiers. J'ai donc modifié un peu le code pour que les dossiers héritent également des autorisations de leur dossier supérieur.
Deux avertissements importants:
- Je ne sais pas si l'intention initiale était de laisser les dossiers inchangés. Ou même si cela fonctionnait bien pour tout le monde sauf moi, et que ces solutions n'étaient pas nécessaires. Ça a marché pour moi.
- Ceci est le premier script que je fais, il est donc très probable qu'il ne soit pas très efficace et puisse contenir des erreurs. N'hésitez pas à le corriger et à l'améliorer.
J'ai seulement changé la doResetPermissions
fonction, mais je colle tout le code pour des raisons de simplicité.
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();
}
}
Si je dois réinitialiser les autorisations de dossier, je renomme le dossier ( Finance → Finance_1 ), crée un nouveau dossier avec l'ancien nom ( Finance ) et "déplace" tous les sous-dossiers vers le nouveau dossier.
Avec ce mouvement, vous réinitialisez toutes les autorisations pour les sous-dossiers.
la source
J'ai créé une application Web Google Apps Scripts qui devrait être proche de ce que vous voulez.
IMPORTANT! Avant d'exécuter cela sur l'un de vos dossiers, assurez-vous de le tester sur un autre compte. Bien que le script semble fonctionner comme prévu, je ne peux garantir qu'il ne gâchera pas vos autorisations. Parcourez donc attentivement le script, consultez la documentation des scripts Google Apps et testez-le soigneusement avant de lancer des données de production.
L'interface utilisateur du script est très rudimentaire, alors n'ayez rien d'extraordinaire.
Pour installer ce script, accédez à votre Google Drive et cliquez sur Nouveau → Script Google Apps . Collez le code et Publier → Distribuer en tant qu'application Web .
Définissez le script sur Exécuter en tant qu'utilisateur connecté (ou similaire, mon Google Drive n'est pas en anglais) .
Lors de l'appel de l'application, la hiérarchie des dossiers de votre Google Drive s'affichera. Cliquez sur un dossier pour afficher une fenêtre contextuelle moche, où vous pouvez choisir d'exécuter un script de réinitialisation des autorisations pour le dossier et ses sous-dossiers (la fonction
doResetPermissions
dans le code).Cette fonction parcourt le dossier et ses sous-dossiers. Pour chaque fichier qu'il trouve, il s'exécute
file.setSharing
avec les valeurs du dossier parent. Il appelle égalementfile.removeViewer
tous les téléspectateurs enregistrés etfile.removeEditor
tous les éditeurs enregistrés.Consultez la documentation de removeViewer et removeEditor pour vous assurer qu'ils font ce que vous voulez.
Notez que l'exécution du script peut prendre un certain temps (selon la taille de la structure de votre dossier), et aucun retour n'est donné pendant qu'il fonctionne, sauf dans les journaux du programme d'exécution de script ( Affichage → Journaux ).
la source
J'ai découvert que la meilleure façon était de
rclone copy
recréer le dossier parent avec tous ses fichiers, tout en changeant les autorisations dans les paramètres de partage par défaut que vous avez choisis.Donc, si vous en avez, disons un disque d'équipe avec un tas de répertoires, déplacez tout simplement dans un nouveau dossier tel que bad_permissions. Créez ensuite une nouvelle télécommande dans rclone pour ce lecteur et utilisez-la
rclone copy gdrive:bad_permissions gdrive:fixed_permissions
. Comme la copie a lieu côté serveur, vous évitez d'avoir à télécharger / télécharger.AVERTISSEMENT : J'ai vérifié le dossier copié avec un outil de comparaison de fichiers par la suite pour m'assurer que tout avait été transféré correctement et que rclone avait en fait manqué une grande quantité de fichiers sans afficher aucune erreur.
la source
http://gappstips.com/docs-tips/view/98/protect-your-google-drive-folders-by-setting-permissions
selon ce lien, il semble que vous devez vous assurer que les fichiers sont définis sur les autorisations par défaut, puis ils devraient hériter du dossier.
modifier: ctrl + a sélectionne tous les fichiers du dossier, puis vous pouvez changer avec qui ils sont partagés en même temps.
la source