Nowy pracownik dołączył do zespołu i potrzebuje dostępu do 47 folderów na Dysku firmowym. Ktoś odszedł z firmy i trzeba cofnąć mu uprawnienia w 120 plikach. Audytor pyta: „kto ma dostęp do tego folderu z danymi osobowymi?" A Ty klikasz w „Udostępnij" po kolei, plik po pliku. Brzmi znajomo?

Problem: ręczne zarządzanie uprawnieniami nie skaluje się

W firmie z 20+ osobami i setkami dokumentów na Dysku Google, model „klik-klik-klik w udostępnianie" generuje trzy poważne ryzyka:

  • Bezpieczeństwo — były pracownik nadal ma dostęp do wrażliwych danych, bo ktoś zapomniał cofnąć uprawnienia. Więcej o tym w moim poście o zabezpieczaniu danych w Arkuszach Google.
  • Compliance — brak audytu kto co widzi. Na pytanie RODO nie jesteś w stanie odpowiedzieć w 24h.
  • Czas — onboarding IT nowego pracownika trwa godzinę zamiast minuty.

Skrypt: masowe udostępnianie folderu nowemu pracownikowi

Poniższy skrypt przyjmuje listę folderów z Google Sheets i udostępnia je wskazanemu użytkownikowi z określonymi uprawnieniami:

function bulkShareFolders() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet()
                  .getSheetByName('Onboarding');
  const rows = sheet.getDataRange().getValues();

  // Kolumny: A=Email, B=Folder ID, C=Rola (VIEWER/EDITOR)
  for (let i = 1; i < rows.length; i++) {
    const email = rows[i][0];
    const folderId = rows[i][1];
    const role = rows[i][2] || 'VIEWER';

    try {
      const folder = DriveApp.getFolderById(folderId);
      folder.addEditor(email);  // lub addViewer()

      if (role === 'VIEWER') {
        // Najpierw dodajemy, potem zmieniamy na viewer
        folder.removeEditor(email);
        folder.addViewer(email);
      }

      sheet.getRange(i + 1, 4).setValue('✅ Udostępniono');
    } catch (e) {
      sheet.getRange(i + 1, 4).setValue('❌ Błąd: ' + e.message);
    }
  }
}

Skrypt: cofanie dostępu po odejściu pracownika

Równie ważne jak udostępnianie jest natychmiastowe cofnięcie dostępu. Poniższy skrypt przeszukuje WSZYSTKIE pliki i foldery, do których dany użytkownik ma dostęp, i go usuwa:

function revokeAllAccess(emailToRevoke) {
  // Przeszukaj całość Drive
  const files = DriveApp.searchFiles(
    `'${emailToRevoke}' in writers or '${emailToRevoke}' in readers`
  );

  let count = 0;
  while (files.hasNext()) {
    const file = files.next();
    try {
      file.removeEditor(emailToRevoke);
    } catch(e) {}
    try {
      file.removeViewer(emailToRevoke);
    } catch(e) {}
    count++;
  }

  Logger.log(`Cofnięto dostęp do ${count} plików dla ${emailToRevoke}`);
  return count;
}

Audyt uprawnień: kto widzi co?

Zanim zaczniesz automatyzować udostępnianie, warto najpierw wiedzieć, jaki jest obecny stan. Skrypt audytowy generuje raport w Google Sheets ze wszystkimi plikami w folderze i listą osób mających do nich dostęp:

function auditFolderPermissions() {
  const FOLDER_ID = 'ID_FOLDERU_DO_AUDYTU';
  const folder = DriveApp.getFolderById(FOLDER_ID);
  const sheet = SpreadsheetApp.getActiveSpreadsheet()
                  .getSheetByName('Audyt');

  sheet.clear();
  sheet.appendRow(['Nazwa pliku', 'Typ', 'Właściciel', 'Edytorzy', 'Czytelnicy']);

  const files = folder.getFiles();
  while (files.hasNext()) {
    const file = files.next();
    const editors = file.getEditors().map(e => e.getEmail()).join(', ');
    const viewers = file.getViewers().map(v => v.getEmail()).join(', ');

    sheet.appendRow([
      file.getName(),
      file.getMimeType(),
      file.getOwner().getEmail(),
      editors,
      viewers
    ]);
  }
}

Wygenerowany raport to fantastyczna baza do dalszej analizy — np. w dashboardzie monitoringu dostępów w Looker Studio. Możesz też nałożyć Row-Level Security, żeby menedżerowie widzieli tylko uprawnienia swoich zespołów.

„W firmie z 50 pracownikami to tysiące kombinacji plik × użytkownik. Nikt tego nie ogarnie ręcznie. Albo automatyzujesz zarządzanie dostępami, albo akceptujesz, że były stażysta nadal czyta strategię cenową."

Best practices przy automatyzacji uprawnień

  • Principle of Least Privilege — domyślnie dawaj VIEWER, EDITOR tylko kiedy faktycznie potrzebny.
  • Loguj każdą zmianę — zapisuj w Sheets kto, kiemu, kiedy dal/cofnął dostęp.
  • Regularny audyt — uruchamiaj skrypt audytowy co tydzień triggerem czasowym.
  • Grupy Google — zamiast udostępniać indywidualnie, twórz grupy (dział@firma.pl) i zarządzaj na poziomie grupy.