"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.
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
- Wyodrębnij
<id>z błędu i otwórz je — zidentyfikuj obiekt i rekord. - Czy użytkownik ma uprawnienie Read/Edit do tego obiektu? → popraw profil/permission set.
- Czy użytkownik ma field-level security na polu lookup? → popraw FLS.
- Czy użytkownik ma dostęp do rekordu dla tego konkretnego rekordu? → sprawdź przycisk Sharing; dodaj udostępnienie.
- Czy automatyzacja działa w kontekście użytkownika? → zdecyduj między kontekstem systemowym a przyznaniem dostępu.
- 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