Ochrona treści pliku

Interfejs Google Drive API umożliwia zapobieganie modyfikacjom plików na kilka sposobów, w tym ograniczanie zawartości plików oraz uniemożliwianie pobierania, drukowania i kopiowania plików.

Ustawianie plików jako tylko do odczytu za pomocą ograniczeń treści na Dysku

Możesz dodać ograniczenie treści do pliku na Dysku Google, aby uniemożliwić użytkownikom:

  • Zmiana tytułu
  • wprowadzać poprawki w treściach;
  • Przesyłanie wersji
  • dodawanie i modyfikowanie komentarzy,

Zastosowanie ograniczeń treści to mechanizm, który pozwala ustawić treści elementu w Drive jako tylko do odczytu bez zmiany uprawnień dostępu. Oznacza to, że nie jest to ograniczenie dostępu. Użytkownicy nie mogą modyfikować zawartości pliku, ale inne operacje są nadal dozwolone na podstawie poziomu dostępu (na przykład użytkownik z uprawnieniami do edycji może nadal przenosić element lub zmieniać jego ustawienia udostępniania).

Aby dodać lub usunąć ograniczenie treści w pliku na Dysku, użytkownik musi mieć odpowiednie uprawnienia. W przypadku pliku lub folderu na Moim dysku lub dysku współdzielonym z uprawnieniami capabilities.canModifyEditorContentRestriction musisz mieć przypisane uprawnienia role=writer. W przypadku pliku lub folderu na Moim dysku lub dysku współdzielonym z ograniczeniem treści ownerRestricted musisz być właścicielem pliku lub mieć uprawnienia role=organizer. Aby wyświetlić element z ograniczeniem treści, użytkownicy muszą mieć uprawnienia role=reader lub wyższe. Pełną listę ról znajdziesz w artykule Role i uprawnienia. Aby zmienić uprawnienia do pliku, przeczytaj artykuł Zmienianie uprawnień.

Aby ustawić ograniczenie treści, możesz użyć pola logicznego contentRestrictions.readOnly w zasobie files. Pamiętaj, że ograniczenie dostępności treści zastąpi obecne.

Scenariusze dotyczące ograniczeń treści

Ograniczenie treści elementu na Dysku informuje użytkowników, że nie należy zmieniać tych treści. Może się tak zdarzyć z kilku powodów:

  • Wstrzymanie pracy nad dokumentem współdzielonym w okresie sprawdzania lub weryfikacji.
  • Ustawienie elementu w stanie końcowym, np. zatwierdzonym.
  • zapobieganie zmianom podczas spotkania z poufnymi informacjami;
  • Zabranie możliwości wprowadzania zmian zewnętrznych w przypadku procesów obsługiwanych przez systemy automatyczne.
  • Ograniczanie możliwości edytowania za pomocą Google Apps Script i dodatków do Google Workspace.
  • Zapobieganie przypadkowemu edytowaniu dokumentu.

Pamiętaj jednak, że chociaż ograniczenia treści mogą ułatwiać zarządzanie treściami, nie mają na celu uniemożliwienie użytkownikom z wystarczającymi uprawnieniami dalszej pracy nad elementem. Nie jest to też sposób na utworzenie niezmiennego rekordu. Ograniczenia treści na Dysku można zmieniać, więc ograniczenie treści dotyczące elementu nie gwarantuje, że element nigdy się nie zmieni.

Zarządzanie plikami z ograniczeniami treści

Dokumenty, Arkusze i Prezentacje Google, a także wszystkie inne pliki mogą zawierać ograniczenia treści.

Ograniczenie treści elementu uniemożliwia zmianę jego tytułu i treści, w tym:

  • komentarze i sugestie (w Dokumentach, Arkuszach, Prezentacjach i plikach binarnych);
  • Wersje pliku binarnego
  • Tekst i formatowanie w Dokumentach
  • tekst lub formuły w Arkuszach, układ Arkuszy oraz wystąpienia w Arkuszach.
  • Wszystkie treści w Prezentacjach oraz kolejność i liczba slajdów

Niektóre typy plików nie mogą zawierać ograniczeń treści. Oto kilka przykładów:

Dodawanie ograniczenia treści

Aby dodać ograniczenie treści pliku, użyj metody files.update z polem contentRestrictions.readOnly ustawionym na true. Dodaj opcjonalny reason, aby wyjaśnić, dlaczego dodajesz ograniczenie, np. „Umowa została sfinalizowana”. Poniższy przykładowy kod pokazuje, jak dodać ograniczenie treści:

Java

File updatedFile =
  new File()
      .setContentRestrictions(
          ImmutableList.of(new ContentRestriction().setReadOnly(true).setReason("Finalized contract."));

File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();

Python

content_restriction = {'readOnly': True, 'reason':'Finalized contract.'}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

Node.js

/**
* Set a content restriction on a file.
* @return{obj} updated file
**/
async function addContentRestriction() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  const contentRestriction = {
    'readOnly': True,
    'reason': 'Finalized contract.',
  };
  const updatedFile = {
    'contentRestrictions': [contentRestriction],
  };
  try {
    const response = await service.files.update({
      fileId: 'FILE_ID',
      resource: updatedFile,
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Zastąp FILE_ID wartością fileId pliku, który chcesz zmodyfikować.

Gdy uruchomisz przykładowy kod, dostęp do pliku będzie ograniczony, a obok jego nazwy w interfejsie Dysku Google pojawi się symbol kłódki (). Plik jest teraz tylko do odczytu.

Plik z ograniczeniem treści na liście plików na Dysku.
Rysunek 1. Plik z ograniczeniem treści na liście plików na Dysku.

Usuwanie ograniczenia treści

Aby usunąć ograniczenie treści pliku, użyj metody files.update, ustawiając pole contentRestrictions.readOnly na false. Poniższy przykładowy kod pokazuje, jak usunąć ograniczenie treści:

Java

File updatedFile =
new File()
    .setContentRestrictions(
        ImmutableList.of(new ContentRestriction().setReadOnly(false));

File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();

Python

content_restriction = {'readOnly': False}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

Node.js

/**
* Remove a content restriction on a file.
* @return{obj} updated file
**/
async function removeContentRestriction() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  const contentRestriction = {
    'readOnly': False,
  };
  const updatedFile = {
    'contentRestrictions': [contentRestriction],
  };
  try {
    const response = await service.files.update({
      fileId: 'FILE_ID',
      resource: updatedFile,
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Zastąp FILE_ID wartością fileId pliku, który chcesz zmodyfikować.

Gdy uruchomisz przykładowy kod, plik nie będzie już podlegał ograniczeniom treści.

Możesz też usunąć ograniczenie treści i zezwolić na edytowanie treści w interfejsie Dysku (o ile masz odpowiednie uprawnienia). Możesz to zrobić na 2 sposoby:

  1. Na Dysku kliknij plik z ograniczeniem treści prawym przyciskiem myszy i wybierz Odblokuj .

    Usuwanie ograniczenia treści pliku na liście plików na Dysku.
    Rysunek 2. Usuwanie ograniczenia treści pliku na liście plików na Dysku.
  2. Otwórz plik z ograniczeniem treści i kliknij (Tryb zablokowany) > Odblokuj plik.

    usunąć ograniczenie treści pliku w dokumencie;
    Rysunek 3. usunąć ograniczenie treści pliku w dokumencie.

Sprawdź, czy nie ma ograniczeń treści

Aby sprawdzić, czy występują ograniczenia treści, użyj metody files.get z polem zwracanym contentRestrictions. Poniższy przykładowy kod pokazuje, jak sprawdzić stan ograniczenia treści:

Java

File response = driveService.files().get("FILE_ID").setFields("contentRestrictions").execute();

Python

response = drive_service.files().get(fileId="FILE_ID", fields = "contentRestrictions").execute();

Node.js

/**
* Get content restrictions on a file.
* @return{obj} updated file
**/
async function fetchContentRestrictions() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  try {
    const response = await service.files.get({
      fileId: 'FILE_ID',
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Zastąp FILE_ID wartością fileId pliku, który chcesz sprawdzić.

Po uruchomieniu przykładowego kodu metoda zwraca zasób ContentRestriction, jeśli istnieje.

Dodawanie ograniczenia treści, które może modyfikować tylko właściciel pliku

Aby dodać ograniczenie treści pliku, tak aby tylko właściciele plików mogli włączać mechanizm, użyj metody files.update z polem logicznym contentRestrictions.ownerRestricted ustawionym na true. Poniższy przykładowy kod pokazuje, jak dodać ograniczenie treści tylko dla właścicieli plików:

Java

File updatedFile =
  new File()
      .setContentRestrictions(
          ImmutableList.of(new ContentRestriction().setReadOnly(true).setOwnerRestricted(true).setReason("Finalized contract."));

File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();

Python

content_restriction = {'readOnly': True, 'ownerRestricted': True, 'reason':'Finalized contract.'}

response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();

Node.js

/**
* Set an owner restricted content restriction on a file.
* @return{obj} updated file
**/
async function addOwnerRestrictedContentRestriction() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
  const service = google.drive({version: 'v3', auth});
  const contentRestriction = {
    'readOnly': True,
    'ownerRestricted': True,
    'reason': 'Finalized contract.',
  };
  const updatedFile = {
    'contentRestrictions': [contentRestriction],
  };
  try {
    const response = await service.files.update({
      fileId: 'FILE_ID',
      resource: updatedFile,
      fields: 'contentRestrictions',
    });
    return response;
  } catch (err) {
    // TODO (developer) - Handle error
    throw err;
  }
}

Zastąp FILE_ID wartością fileId pliku, który chcesz zmodyfikować.

Gdy uruchomisz przykładowy kod, plik będzie objęty ograniczeniem treści i tylko właściciele plików będą mogli go usunąć. Jeśli jesteś właścicielem pliku, obok jego nazwy w interfejsie Dysku (UI) pojawi się symbol aktywnej blokady (). Jeśli nie jesteś właścicielem, symbol kłódki jest wyszarzony.

Aby usunąć flagę ownerRestricted, użyj metody files.update z polem contentRestrictions.ownerRestricted ustawionym na false.

Możliwości dotyczące ograniczeń treści

Zasób files zawiera zbiór pól logicznych capabilities, które wskazują, czy można wykonać działanie na pliku.

Ograniczenia treści obejmują te capabilities:

  • capabilities.canModifyEditorContentRestriction: czy bieżący użytkownik może dodać lub zmodyfikować ograniczenie treści.
  • capabilities.canModifyOwnerContentRestriction: czy bieżący użytkownik może dodać lub zmodyfikować ograniczenie treści przez właściciela.
  • capabilities.canRemoveContentRestriction: określa, czy bieżący użytkownik może usunąć zastosowane ograniczenie treści (jeśli istnieje).

Więcej informacji znajdziesz w artykule Możliwości.

Przykład pobierania pliku capabilities znajdziesz w sekcji Sprawdzanie uprawnień użytkowników.

Uniemożliwianie użytkownikom pobierania, drukowania i kopiowania pliku

Możesz ograniczyć sposób pobierania, drukowania i kopiowania plików na Dysku, w Dokumentach, Arkuszach i Prezentacjach przez użytkowników z uprawnieniami role=commenter lub role=reader.

Aby usunąć opcje pobierania, drukowania i kopiowania plików, użyj metody files.update z ustawieniem pola logicznego copyRequiresWriterPermission na true.