Rozwiązywanie problemówDostęp do rekordówBłędy

"Insufficient access rights on cross-reference id" — jak to naprawić

Co oznacza błąd Salesforce "insufficient access rights on cross-reference id", pięć przyczyn, które go powodują, oraz sposób na jego naprawę krok po kroku.

AgentForceAccess 3 min czytania
Dwie ikony rekordów połączone przerwaną, iskrzącą wiązką światła z symbolem ostrzeżenia i kłódką

INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY: insufficient access rights on cross-reference id to jeden z najczęściej źle interpretowanych błędów w Salesforce. Odruchowo sprawdza się uprawnienia do rekordu, który właśnie zapisujesz — ale błąd prawie nigdy nie dotyczy tego rekordu. Dotyczy on innego rekordu, na który ten wskazuje.

Ten przewodnik wyjaśnia, co oznacza ten komunikat, i daje Ci powtarzalny sposób na jego naprawę.

Co tak naprawdę oznacza ten błąd

Gdy wstawiasz lub aktualizujesz rekord, Salesforce sprawdza też każdy rekord, do którego on się odwołuje — poprzez pola lookup lub master-detail, własność albo operacje na listach powiązanych. Jeśli użytkownik wykonujący operację nie ma dostępu do jednego z tych rekordów, cała operacja zostaje odrzucona z komunikatem insufficient access rights on cross-reference id: <id>.

<id> to 15- lub 18-znakowe ID rekordu, do którego użytkownik nie może dotrzeć — a nie tego, który jest zapisywany. To rozróżnienie jest kluczem do całego rozwiązania.

Komunikat tłumacz tak: “Użytkownik wykonujący tę akcję nie ma dostępu do powiązanego rekordu <id>, na który wskazuje ten rekord.”

Krok 0 — Zidentyfikuj rekord cross-reference

Skopiuj ID z błędu i otwórz je bezpośrednio:

https://yourdomain.my.salesforce.com/<id>

Teraz wiesz, który obiekt i rekord Cię blokuje (nadrzędny Account, Contact w polu lookup, właściciel, powiązany Case itd.). Każdy poniższy krok dotyczy tego rekordu.

Pięć przyczyn, w kolejności prawdopodobieństwa

1. Brak uprawnienia do obiektu

Profil lub permission sets użytkownika nie mają uprawnienia Read (lub Create/Edit) do obiektu, do którego się odwołujesz. Uprawnienia do obiektu to brama, zanim w ogóle zostanie sprawdzone współdzielenie — zobacz uprawnienia do obiektów a współdzielenie rekordów. Przyznaj potrzebne uprawnienia CRUD za pomocą permission set.

2. Field-level security na polu lookup

Użytkownik nie może zobaczyć ani edytować pola, które przechowuje odwołanie. Jeśli FLS ukrywa pole lookup, zapis do niego się nie powiedzie. Sprawdź field-level security tego pola w profilu/permission sets użytkownika.

3. Brak dostępu do powiązanego rekordu (współdzielenie)

Użytkownik ma dostęp do obiektu, ale nie ma dostępu do rekordu dla tego konkretnego powiązanego rekordu. Przyczyny: domyślny dostęp organizacji (org-wide default) ustawiony na Private bez reguły współdzielenia albo użytkownik nie znajduje się powyżej właściciela w hierarchii ról. Potwierdź to przyciskiem Sharing na powiązanym rekordzie, a następnie rozszerz dostęp regułą współdzielenia, zespołem lub udostępnieniem ręcznym.

4. Automatyzacja działająca w kontekście użytkownika

Flows skonfigurowane tak, by działać “How to run the flow → in user context”, albo Apex zadeklarowany jako with sharing, egzekwują uprawnienia użytkownika wykonującego operację. Jeśli ten użytkownik nie może dotrzeć do powiązanego rekordu, automatyzacja zawodzi z tym błędem, mimo że administrator testował ją bez problemu.

  • Rozwiązanie A (zalecane, gdy ma to sens): uruchom Flow w kontekście systemowym / Apex without sharing, aby automatyzacja nie była ograniczona uprawnieniami użytkownika — stosuj tylko wtedy, gdy użytkownik faktycznie nie powinien potrzebować bezpośredniego dostępu.
  • Rozwiązanie B: rzeczywiście przyznaj użytkownikowi dostęp do powiązanego rekordu (przyczyny 1–3).

5. Usunięte, puste lub nieprawidłowe odwołanie

Pole lookup wskazuje na rekord, który został usunięty, nigdy nie istniał, albo ID jest puste/błędne (częste przy ładowaniu danych i integracjach). Salesforce zgłasza brakujące rekordy jako niewystarczające uprawnienia. Sprawdź, czy ID prowadzi do istniejącego rekordu, zanim zapiszesz.

Powtarzalna lista kontrolna naprawy

  1. Wyodrębnij <id> z błędu i otwórz je — zidentyfikuj obiekt i rekord.
  2. Czy użytkownik ma uprawnienie Read/Edit do tego obiektu? → popraw profil/permission set.
  3. Czy użytkownik ma field-level security na polu lookup? → popraw FLS.
  4. Czy użytkownik ma dostęp do rekordu dla tego konkretnego rekordu? → sprawdź przycisk Sharing; dodaj udostępnienie.
  5. Czy automatyzacja działa w kontekście użytkownika? → zdecyduj między kontekstem systemowym a przyznaniem dostępu.
  6. Czy wskazywane ID nadal prowadzi do istniejącego rekordu? → popraw dane/integrację.

Pierwszy nieudany punkt kontrolny to Twoja przyczyna źródłowa.

Dlaczego ten błąd to tak naprawdę problem śledzenia dostępu

Każda z powyższych przyczyn sprowadza się do tego samego pytania: czy ten użytkownik rzeczywiście ma dostęp do powiązanego rekordu i przez jaki mechanizm? Odpowiedź na nie ręcznie — w obrębie CRUD, FLS i sześciu mechanizmów współdzielenia — jest żmudna.

AgentForceAccess odpowiada na nie prostym językiem — wklej użytkownika i rekord, a narzędzie prześledzi dokładnie, które uprawnienie lub udostępnienie przyznaje (lub blokuje) dostęp, dzięki czemu przestaniesz zgadywać, z którą z pięciu przyczyn masz do czynienia.

Najczęściej zadawane pytania

Do czego właściwie odnosi się "cross-reference id"?

To ID rekordu Salesforce *powiązanego* rekordu, na który wskazuje Twoja akcja poprzez pole lookup lub master-detail. Użytkownik wykonujący operację nie ma dostępu do tego rekordu, więc zapis jest odrzucany. Dopisz to ID do adresu URL Twojej organizacji (https://yourdomain.my.salesforce.com/<id>), aby je zidentyfikować.

Dlaczego ta sama akcja działa dla administratora, ale zawodzi dla zwykłego użytkownika?

Administratorzy zwykle mają "View All"/"Modify All" lub "Modify All Data", które omijają model współdzielenia. Zwykły użytkownik jest blokowany przez uprawnienia do obiektu, field-level security lub współdzielenie powiązanego rekordu na poziomie rekordu. Odtwórz akcję jako dotknięty użytkownik, aby wyizolować problem.

Czy uruchomienie Flow w kontekście systemowym ukrywa rzeczywisty problem z uprawnieniami?

Może go ukrywać. Kontekst systemowy ignoruje współdzielenie oraz CRUD/FLS użytkownika wykonującego operację, co naprawia błąd, ale może przyznać dostęp, którego użytkownik nie powinien mieć w interfejsie. Używaj go świadomie i upewnij się, że użytkownik rzeczywiście powinien móc dotrzeć do powiązanego rekordu.

Czy ten błąd może wynikać z usuniętego lub brakującego rekordu?

Tak. Jeśli pole lookup wskazuje na rekord, który został usunięty, nigdy nie istniał, albo ID jest puste/nieprawidłowe, Salesforce zgłasza to jako niewystarczające uprawnienia, a nie "not found". Sprawdź, czy wskazywane ID nadal prowadzi do istniejącego rekordu.

Zobacz to na swojej organizacji

AgentForceAccess wyjaśnia prostym językiem, dlaczego dowolny użytkownik widzi dowolny rekord lub plik — w każdym mechanizmie współdzielenia Salesforce.

Poproś o wczesny dostęp