Mappa ACL

Per garantire che solo gli utenti con accesso a un elemento possano visualizzarlo all'interno di un nei risultati di ricerca, è consigliabile indicizzare gli elementi tramite i relativi elenchi di controllo di accesso (ACL) dal repository aziendale. Devi modellare gli ACL del tuo repository e a includere questi ACL durante l'indicizzazione degli elementi nel repository. Il connettore dei contenuti SDK offre un ricco set di metodi ACL sufficientemente potenti da modellare gli ACL di nella maggior parte dei repository.

Crea un ACL

La creazione di un ACL è un processo in due fasi:

  1. Crea un Principal utilizzando metodi statici ACL .
  2. Utilizza la Acl.Builder per creare l'ACL utilizzando l'entità.

La parte restante di questo documento tratta alcuni concetti che devi conoscere per creare e creare ACL, come l'ereditarietà e il contenimento.

Crea un'entità utilizzando un ID esterno

Google Cloud Search richiede che utenti e gruppi risolvano gli indirizzi email di Google . Durante l'indicizzazione degli elementi del repository, i connettori di contenuti potrebbero non avere questi . Tuttavia, l'SDK Content Connector ti consente di utilizzare qualsiasi ID esterno (ID che concede a un utente o a un gruppo l'accesso agli elementi del repository) di un indirizzo email, per indicizzare un elemento. Utilizza la getUserPrincipal() o il metodo getGroupPrincpal() per creare entità contenenti ID esterni. Esistono diversi altri metodi statici ACL classe utilizzata per creare Principal oggetti.

Eredità ACL

L'ereditarietà ACL si riferisce all'autorizzazione, per un elemento specifico e dell'utente, in base al risultato di una combinazione di ACL dell'elemento e ACL della catena di ereditarietà. Le regole utilizzate per prendere una decisione di autorizzazione dipendono dal repository e dalle proprietà dell'elemento.

Imposta ereditarietà

Ogni elemento può avere entità consentite direttamente e entità negate direttamente, specificato utilizzando setReaders() e setDeniedReaders() metodi. Un accesso diretto L'entità è un utente identificato in un ACL che fornisce l'accesso diretto un elemento specifico. Un'entità diretta negata è un utente identificato in un ACL come non avere accesso a un elemento specifico.

Un elemento può anche ereditare entità indirette consentite e entità negate indirette utilizzando setInheritFrom() . Un'entità indiretta consentita è un utente che, tramite l'ereditarietà ACL, ha accesso indiretto a un elemento specifico. Un'entità negata indiretta è un utente a cui, tramite l'ereditarietà ACL, viene negato l'accesso a un elemento specifico.

La figura 1 mostra come Il metodo setInheritFrom() viene utilizzato per ereditare le entità negate indirettamente consentite e indirette.

Disegno di collegamenti tra elementi
Figura 1. Il metodo setInheritFrom().

Questi controlli dell'accesso sono rappresentati nella Figura 1:

  • L'Utente 1 è un'entità consentita diretta dell'elemento A.
  • L'utente 2 è un'entità consentita diretta dell'elemento B.
  • L'elemento B eredita l'ACL dell'elemento A.

In base ai controlli dell'accesso, le regole di accesso sono:

  • Non è necessario specificare esplicitamente l'Utente 1 come entità dell'elemento B per essere un'entità indiretta consentita dell'elemento B; l'accesso viene ereditato perché l'Utente 1 è elencato come entità direttamente consentita dell'elemento A e dell'elemento B eredita l'ACL dall'elemento A.
  • L'utente 2 non è un'entità indiretta consentita per l'elemento A.

Imposta tipo di ereditarietà

Se imposti l'ereditarietà utilizzando setInheritFrom() devi impostare il tipo di ereditarietà utilizzando il metodo setInheritanceType() . Il tipo di ereditarietà determina il modo in cui L'ACL si combina con l'ACL principale. La Acl.InheritanceType implementa tre tipi di ereditarietà:

  • BOTH_PERMIT - Imposta il tipo di ereditarietà su BOTH_PERMIT per concedere l'accesso a un utente all'elemento solo quando sia l'ACL dell'elemento secondario sia l'ACL dell'elemento ereditato dall'elemento padre consentire all'utente di accedere all'elemento.

  • CHILD_OVERRIDE - Imposta il tipo di ereditarietà su CHILD_OVERRIDE per forzare l'elemento secondario all'ACL di un elemento per avere la precedenza sull'ACL dell'elemento padre ereditato quando in conflitto. Quindi, se l'ACL dell'elemento principale nega l'accesso all'utente in quanto lettore negato, l'utente ha ancora accesso se ha accesso al bambino. elemento come lettore. Al contrario, anche se l'ACL dell'elemento padre concede l'accesso a L'utente, quest'ultimo non potrà accedere se è un lettore negato del figlio.

  • PARENT_OVERRIDE - Imposta il tipo di ereditarietà su PARENT_OVERRIDE per forzare l'applicazione ACL dell'elemento principale per avere la precedenza sull'ACL dell'elemento secondario quando in conflitto. Quindi, se l'ACL dell'elemento secondario nega l'accesso all'utente come lettore, l'utente può ancora accedere se può accedere all'elemento principale come Reader. Al contrario, anche se l'ACL dell'elemento secondario concede l'accesso all'utente, il l'utente non ha accesso se è un lettore negato dell'elemento principale.

Durante la valutazione di una catena di ereditarietà ACL, l'ordine di valutazione può cambiare l'esito della decisione di autorizzazione. Cloud Search fornisce leaf-to-root l'ordine di valutazione delle catene di ereditarietà ACL. Nello specifico, la decisione relativa all'ACL per una catena inizia con la valutazione di un bambino con i suoi genitori e può progredire fino al padre root.

Ad esempio, se il publisher secondario ha il tipo di ereditarietà CHILD_OVERRIDE e l'utente ha accesso all'account secondario, Drive non lo deve valutare. Tuttavia, se tuo figlio ha PARENT_OVERRIDE o BOTH_PERMIT, Drive continua sulla valutazione dell'ereditarietà più avanti nella catena.

Contenimento ed eliminazione di elementi

Durante l'indicizzazione di un elemento, puoi etichettarlo come contenitore utilizzando il metodo setContainer() del metodo IndexingItemBuilder . La relazione container/containee stabilisce la relazione fisica gerarchia di elementi e garantisce che questi vengano eliminati correttamente. Quando elimini un contenitore, vengono eliminati anche i relativi elementi.

Le relazioni di contenimento sono completamente indipendenti dalle regole di ereditarietà ACL. Ad esempio, un file in un file system può essere contenuto in una cartella per il ma eredita l'ACL da una cartella diversa. L'eliminazione di un cartella non elimina gli elementi che ereditano l'ACL, a meno che non vengano nella gerarchia di contenimento della cartella.

Questi controlli dell'accesso sono rappresentati nella Figura 2:

  • L'Utente 1 è un'entità consentita diretta dell'elemento A.
  • L'utente 2 è un'entità consentita diretta dell'elemento B.
  • L'utente 3 è un'entità consentita diretta dell'elemento C.
  • L'elemento C eredita l'ACL dell'elemento A.
  • L'elemento B chiama l'elemento A come contenitore.
  • L'elemento C assegna all'elemento B il nome contenitore.

In base ai controlli dell'accesso, le regole di accesso sono:

  • L'accesso indiretto proviene da setInheritFrom() . Di conseguenza, l'utente 1 può accedere all'elemento C, perché l'elemento C eredita l'ACL elemento A.
  • L'accesso indiretto non proviene dall'elemento C contenuto dall'elemento B. Di conseguenza, l'utente 2 non può accedere all'elemento C.
Disegno di collegamenti tra elementi
Figura 2. Il metodo setInheritFrom() in uso.

La separazione dell'ereditarietà ACL dalla gerarchia di contenimento consente di definire diverse strutture esistenti.

Quando un elemento viene eliminato correttamente:

  • Qualsiasi elemento che conteneva un elemento eliminato diventa non disponibile per la ricerca pianificata per l'eliminazione dall'origine dati di Google.
  • Qualsiasi elemento che abbia specificato l'elemento eliminato utilizzando Metodo setInheritFrom() diventa non disponibile per la ricerca.

Se in una risorsa è stato eliminato un elemento utilizzando setInheritFrom() ma non ha un container impostato utilizzando setContainer() o la sua gerarchia di contenimento non contiene elementi eliminati, ma l'elemento e i relativi dati rimangono nell'origine dati di Google. Sei responsabile dell'eliminazione dell'elemento.

La figura 3 mostra un esempio di come funziona l'eliminazione di una gerarchia di elementi.

Disegno di collegamenti tra elementi
Figura 3. Eliminazione di un elemento e dell'ereditarietà ACL.

Questi controlli dell'accesso sono rappresentati nella Figura 3:

  • L'Utente 1 è un'entità consentita diretta dell'elemento A.
  • L'utente 2 è un'entità consentita diretta dell'elemento D.
  • L'elemento D e l'elemento E ereditano entrambi l'ACL dell'elemento A.
  • L'elemento D assegna all'elemento A come contenitore il nome.
  • Gli elementi A ed E sono di livello principale in quanto non dispongono di un container.

Elimina a cascata i riferimenti al container. Quando viene eliminato l'elemento A:

  • Tutti i discendenti di setInheritFrom() perdere l'accesso per tutti gli utenti.
  • Nessun utente può accedere all'elemento A.
  • L'elemento D è stato eliminato implicitamente. Nessun utente può accedere all'elemento D.
  • L'elemento E non viene eliminato, poiché l'eliminazione interessa solo il container riferimenti.
  • L'elemento E diventa irraggiungibile e nessun utente può cercarlo.