FileContentDocumentAmministrazione Salesforce

Come funziona la condivisione di file sui record (ContentDocumentLink)

Il data model dietro Salesforce Files: ContentDocument, ContentVersion e ContentDocumentLink, e come ShareType e Visibility decidono chi vede un file.

AgentForceAccess 3 min di lettura
Diagramma schematico di un nodo file centrale collegato a entità record, utente e gruppo

Se ti sei mai chiesto perché un file compare dove compare in Salesforce — o se hai dovuto interrogare i file in Apex o in un report — ti serve il data model sottostante. I moderni Salesforce Files sono tre oggetti correlati, e due campi sul collegamento decidono chi vede cosa. Questo è il complemento per admin/sviluppatori di chi può vedere un file in Salesforce.

I tre oggetti

OggettoCos’èQuanti
ContentDocumentIl file stessoUno per file
ContentVersionUna versione specifica del contenuto del fileUna per caricamento/revisione
ContentDocumentLinkUn collegamento che lega il file a un record, un utente o un gruppoMolti per file

Quando carichi un file crei una ContentVersion, che Salesforce incapsula in un ContentDocument. Quando alleghi quel file a un record o lo condividi con qualcuno, crei un ContentDocumentLink.

Il file è il ContentDocument. Dove vive e chi può vederlo sta interamente nei suoi ContentDocumentLink.

Una riga di ContentDocumentLink dice “questo file è collegato a quella cosa, con questo livello di accesso, per questo pubblico”. I suoi campi chiave:

LinkedEntityId — a cosa è allegato il file

L’ID di ciò a cui il file è collegato:

  • Un record (Account, Opportunity, Case, oggetto personalizzato…) → il file è “allegato a” quel record.
  • Un User o Group → il file è condiviso direttamente con quella persona o quel gruppo.

Un singolo file può avere molti collegamenti contemporaneamente — allegato a due record e condiviso con un utente nello stesso momento. Ogni collegamento è un percorso indipendente per vedere il file.

ShareType — il livello di accesso

ValoreLivelloPuò fare
VViewerAprire e scaricare
CCollaboratorVisualizzare, modificare, caricare nuove versioni, cambiare la condivisione
IInferredLivello di accesso ereditato dall’accesso al record collegato

Inferred (I) è quello importante per i file allegati ai record: l’accesso di un utente al file è derivato dal suo accesso al record a cui è collegato. È il meccanismo dietro a “chiunque possa vedere il record può vedere i suoi file”.

Visibility — quale pubblico

ValorePubblico
AllUsersUtenti interni ed esterni (community)
InternalUsersSolo utenti interni
SharedUsersSolo gli utenti con cui il file è esplicitamente condiviso

Questo è il campo che rompe silenziosamente l’accesso da Experience Cloud: un file allegato a un record con Visibility = InternalUsers non comparirà agli utenti della community anche se possono vedere il record. (Maggiori dettagli in file e utenti guest / Experience Cloud.)

Come si risolve davvero l’accesso

Mettendo tutto insieme, un utente può vedere un file se uno qualsiasi dei suoi ContentDocumentLink glielo concede:

  1. Un collegamento a un record a cui può accedere (ShareType I) — accesso ereditato dalla condivisione del record.
  2. Un collegamento diretto a lui o al suo gruppo (ShareType V/C).
  3. L’appartenenza a una library, o un link pubblico (meccanismi separati).

…e la Visibility del collegamento deve includere il suo pubblico. La maggior parte dei ticket “file non visibile” si riduce a un collegamento mancante o a una Visibility troppo restrittiva.

Interrogarlo

Poiché è tutto dati, puoi ispezionarlo direttamente — ad esempio trovare ogni punto in cui un file è condiviso:

SELECT ContentDocumentId, LinkedEntityId, ShareType, Visibility
FROM ContentDocumentLink
WHERE ContentDocumentId = '069...'

Ogni riga è un pubblico che può raggiungere il file. Per enumerare le persone, devi poi espandere l’intero pubblico di condivisione di ciascun record LinkedEntityId — ed è qui che la cosa cresce in fretta.

Dalle righe a una risposta in linguaggio semplice

Un file allegato a più record eredita l’intero pubblico di ciascun record — gerarchia dei ruoli, regole di condivisione, team e tutto il resto — moltiplicato per ogni ContentDocumentLink. Ricostruire tutto questo a mano dalle righe grezze è esattamente il lavoro in cui si nasconde l’esposizione accidentale. AgentForceAccess percorre i ContentDocumentLink e la condivisione del record dietro ciascuno di essi, e risponde a “chi può vedere questo file, e perché” in linguaggio semplice.

Domande frequenti

Qual è la differenza tra ContentDocument, ContentVersion e ContentDocumentLink?

ContentDocument è il file stesso (uno per file). ContentVersion è una versione specifica di quel file (una per ogni caricamento/revisione). ContentDocumentLink collega un ContentDocument a qualcos'altro — un record, un utente o un gruppo — e porta con sé il livello di accesso e la visibilità per quel collegamento.

A cosa punta LinkedEntityId?

È l'ID di ciò a cui il file è collegato. Per un file allegato a un record è l'ID del record (Account, Opportunity, Case, ecc.); per un file condiviso direttamente con una persona o un gruppo è un ID di User o Group. Un singolo file può avere molti ContentDocumentLink contemporaneamente.

Cosa sono i valori V, C e I di ShareType?

V = Viewer (apre e scarica), C = Collaborator (visualizza, modifica, carica versioni, cambia la condivisione), I = Inferred (il livello di accesso che un utente ottiene indirettamente dall'accesso al record collegato). Inferred è il modo in cui l'accesso al record si propaga a un file.

Cosa fa il campo Visibility?

Visibility imposta a chi è esposto il collegamento: AllUsers (utenti interni ed esterni/community), InternalUsers (solo interni) o SharedUsers (solo gli utenti con cui il file è esplicitamente condiviso). Gli utenti Community/Experience Cloud di solito hanno bisogno di AllUsers per vedere un file allegato a un record.

Provalo sulla tua org

AgentForceAccess spiega, in linguaggio chiaro, perché un utente può vedere un record o un file — attraverso ogni meccanismo di condivisione di Salesforce.

Richiedi accesso anticipato