Resolução de problemasAcesso a registosErros

"Insufficient access rights on object id" — como corrigir

O que significa o erro "insufficient access rights on object id" do Salesforce, como difere da versão cross-reference, e uma forma passo a passo de o corrigir.

AgentForceAccess 4 min de leitura
Um único ícone de registo atrás de um cadeado com um símbolo de aviso, uma mão a tentar alcançá-lo bloqueada por uma barreira

INSUFFICIENT_ACCESS_OR_READONLY: insufficient access rights on object id parece quase idêntico ao seu primo cross-reference, mas aponta para um problema diferente. Este diz respeito ao registo que está a tocar diretamente — o utilizador simplesmente não consegue escrever nele.

Este guia explica o que a mensagem significa, como a distinguir da versão cross-reference, e uma forma repetível de a corrigir.

O que o erro realmente significa

Quando um utilizador insere, atualiza ou elimina um registo, o Salesforce verifica duas coisas antes de permitir a escrita: as permissões de objeto do utilizador (CRUD) e o seu acesso ao nível do registo (partilha). Se faltar qualquer um deles para o registo a ser guardado, a operação é rejeitada com:

INSUFFICIENT_ACCESS_OR_READONLY: insufficient access rights on object id: <id>

O <id> é o ID de 15 ou 18 caracteres do registo que tentou guardar — não de um relacionado. O utilizador em execução consegue vê-lo, ou até lê-lo, mas não tem acesso de escrita ao mesmo.

Traduza a mensagem assim: “O utilizador que está a executar esta ação não consegue editar (ou eliminar) o registo <id> sobre o qual está a atuar."

"object id” vs “cross-reference id” — não os confunda

Estes dois erros são irmãos e são constantemente trocados:

insufficient access rights on object idinsufficient access rights on cross-reference id
Qual o registo que bloqueia?O registo que está a guardarUm registo relacionado para o qual aponta (lookup / master-detail)
Código de erro típicoINSUFFICIENT_ACCESS_OR_READONLYINSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY
Primeira coisa a corrigirAcesso de edição/eliminação a este registoAcesso de leitura ao registo relacionado

Se o ID na mensagem for o registo em que clicou em Save, está a ler o artigo certo. Se for um pai, um proprietário ou um registo de lookup, consulte antes insufficient access rights on cross-reference id.

Passo 0 — Identificar o registo

Copie o ID do erro e abra-o diretamente:

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

Confirme que é o objeto e o registo que esperava guardar. Tudo o que se segue visa o acesso de escrita a esse registo.

As quatro causas, por ordem de probabilidade

1. Falta de permissão de objeto (CRUD)

Ao profile ou aos permission sets do utilizador falta o Edit (ou Delete) no objeto. As permissões de objeto são o portão antes de a partilha sequer ser avaliada — um utilizador pode ter acesso total ao registo e continuar bloqueado se o Edit não estiver concedido. Veja permissões de objeto vs. partilha de registos. Conceda o CRUD necessário através de um permission set.

2. Acesso ao registo só de leitura ou inexistente (partilha)

O utilizador tem o Edit de objeto, mas apenas acesso de leitura — ou nenhum acesso — a este registo específico. Causas comuns:

  • Um org-wide default Private sem nenhuma sharing rule a alcançar o utilizador.
  • O utilizador não está acima do proprietário na hierarquia de funções (role hierarchy).
  • O registo está partilhado como Read Only (sharing rule, equipa ou partilha manual), o que permite abrir mas não guardar.

Confirme com o botão Sharing no registo e, depois, estenda o acesso de leitura-escrita (Read/Write) com uma sharing rule, uma equipa ou uma partilha manual. A diferença entre leitura e leitura-escrita aqui é exatamente o que separa o “consegue abrir” do “consegue guardar”.

3. Sem acesso de edição a um pai master-detail

Se o registo for o lado detail de uma relação master-detail, editá-lo exige acesso ao seu pai. Um utilizador que só consegue ler o pai (ou que não o consegue ver de todo) não consegue guardar o filho — o Salesforce reporta-o como acesso insuficiente no object id do filho. Conceda ao utilizador acesso de leitura-escrita ao registo pai.

4. Um registo bloqueado ou com aprovação pendente

Um registo bloqueado por um processo de aprovação ativo — ou por um lock de Apex — não pode ser editado por ninguém (administradores à parte) até que seja aprovado, retirado ou desbloqueado. Isto produz o mesmo erro mesmo para utilizadores que genuinamente têm acesso de edição. Verifique o histórico de aprovação do registo antes de mexer nas permissões.

Causa bónus — automatização no contexto do utilizador. Um Flow configurado para correr “no contexto do utilizador”, ou Apex declarado como with sharing, aplica o acesso do utilizador em execução. Se esse utilizador não conseguir escrever no registo, a automatização falha com este erro mesmo que um administrador a tenha testado sem problemas. Ou corre a automatização em contexto de sistema, ou concede ao utilizador acesso real (causas 1–3).

Uma checklist de correção repetível

  1. Extraia o <id> do erro e abra-o — confirme qual o registo que falhou.
  2. O registo está num processo de aprovação / bloqueado? → resolva isso primeiro.
  3. O utilizador tem Edit/Delete de objeto nesse objeto? → corrija o profile/permission set.
  4. O utilizador tem acesso de leitura-escrita ao registo (não apenas leitura)? → verifique o botão Sharing; adicione uma partilha de leitura-escrita.
  5. É um filho master-detail? → conceda leitura-escrita no pai.
  6. Existe uma automatização a correr no contexto do utilizador? → decida entre contexto de sistema e conceder acesso.

A primeira verificação que falhar é a sua causa-raiz.

Porque este erro é, na verdade, um problema de rastreio de acesso

Todas as causas acima são a mesma questão subjacente: este utilizador tem realmente acesso de escrita a este registo e, em caso afirmativo, através de que mecanismo? É algo trabalhoso de responder à mão, abrangendo CRUD, propriedade (ownership), a hierarquia de funções e seis mecanismos de partilha — sobretudo quando leitura vs. leitura-escrita é a diferença.

O AgentForceAccess responde a isso em linguagem clara — cole o utilizador e o registo, e ele rastreia exatamente que permissão ou partilha concede (ou bloqueia) o acesso de escrita, para que deixe de adivinhar qual das causas está a enfrentar.

Perguntas frequentes

Qual é a diferença entre "insufficient access rights on object id" e "on cross-reference id"?

"On object id" diz respeito ao registo que está a inserir, atualizar ou eliminar diretamente — o utilizador não tem acesso de edição/eliminação a *esse* registo. "On cross-reference id" diz respeito a um registo *relacionado* alcançado através de um campo de lookup ou master-detail. A mesma família de erro, alvo oposto. Se o ID na mensagem for o registo em que clicou em Save, é a versão object-id.

Porque é que um administrador consegue editar o registo mas um utilizador padrão recebe este erro?

Os administradores costumam ter "Modify All Data" ou "Modify All" no objeto, que ignoram os org-wide defaults, as sharing rules e a hierarquia de funções. O utilizador padrão é bloqueado pelas permissões de objeto ou pela partilha ao nível do registo. Reproduza sempre a ação com sessão iniciada como (ou via "Login As") o utilizador afetado para o isolar.

O utilizador tem acesso de leitura ao registo — porque continua a haver acesso insuficiente ao guardar?

A leitura não chega para escrever. Editar ou eliminar exige a permissão de objeto Edit/Delete *e* acesso de leitura-escrita ao registo. Um registo partilhado como "Read Only" (via uma sharing rule, a hierarquia de funções ou uma partilha manual) deixa o utilizador abri-lo mas não guardar alterações, o que surge como acesso insuficiente ao atualizar.

Um registo bloqueado ou com aprovação pendente pode causar este erro?

Sim. Enquanto um registo está bloqueado por um processo de aprovação ativo (ou por um lock de Apex), nem mesmo os utilizadores com acesso de edição conseguem guardar até que seja aprovado, retirado ou desbloqueado. Verifique se o registo está num processo de aprovação antes de perseguir permissões.

Veja na sua própria org

O AgentForceAccess explica, em linguagem clara, porque é que qualquer utilizador vê qualquer registo ou ficheiro — em todos os mecanismos de partilha do Salesforce.

Pedir acesso antecipado