Pular para o conteúdo principal

Atualiza um usuário

PUT 

/user/:iduser

Atualiza os dados do usuário na empresa.

A atualização não é totalmente parcial — monte o corpo com o cadastro completo. Os dados profissionais, o bloco de vendedor/comissão/técnico e as etiquetas só são tocados quando vêm no corpo, mas os dados pessoais são sempre reescritos: UserCpfCnpj, UserTelephone, UserExtenalId, MFAEnabled e IDModuleFavorite são gravados vazios quando omitidos, e omitir MFAEnabled ainda apaga o segredo do app autenticador. Envie sempre o cadastro inteiro (é o que a tela faz), não apenas o campo alterado.

Pela mesma razão, todo corpo que não seja um atalho exclusivo precisa trazer Login ou UserCpfCnpj — sem nenhum dos dois a requisição é recusada com Documento e/ou email obrigatório para cadastrar usuário. Sem a chave Login no corpo, o login atual é mantido; Login enviado vazio vira o login interno <documento>@email.com.br, o que conta como troca de e-mail (exige o privilégio de redefinir senha, salvo quando o login atual já é interno).

Quando Password é enviado, a senha é validada contra a política da empresa (comprimento mínimo, complexidade, não repetir as 5 últimas senhas e validade). Alterar a senha de outro usuário exige o privilégio de redefinir senha; alterar a própria, não. Mudanças de campos são registradas em log de auditoria (valores de antes e depois).

Convite pendente. Enquanto o vínculo está pendente (Status 3, ver POST /user), nada do cadastro pode ser alterado por esta rota, nem o Status: só a própria pessoa ativa o vínculo, aceitando o convite. Para desistir do convite, remova o usuário da conta.

Usuário que também tem acesso a outra conta. Editando outra pessoa, a conta não altera a senha, o PIN, o e-mail, o CPF/CNPJ e o telefone dela, nem desliga ou troca o tipo do MFA: esses dados valem em todas as contas, e só ela mesma os altera (a senha, pelo link “Recuperar senha” da tela de entrada; o telefone, em Meu perfil). PIN, e-mail, CPF/CNPJ e MFA não têm tela de autoatendimento: a mensagem de erro orienta falar com o suporte. A conta também não reativa o vínculo (Status 1) dessa pessoa: para trazê-la de volta, cadastre-a de novo e ela recebe um convite.

A atualização também cobre os dados profissionais do colaborador — funções, função atual, cargo, escala de trabalho, supervisor e categorias/grupos de endereço de armazenagem — e as etiquetas: o campo Tags substitui integralmente as etiquetas atuais.

Os campos de vendedor, comissão e técnico — RestrictAccessSalesman, DiscountPercentLimit, IDTypeSalesmanCommission, ExcludeCanceledOrdersCommission, ExcludeReturnedOrdersCommission e Technician — só são gravados quando Salesman vem no mesmo corpo; enviados sozinhos, são ignorados.

Quatro campos funcionam como atalhos exclusivos: só têm efeito quando são o único campo do corpo, e nesse caso apenas eles são salvos e a resposta é uma string curta de confirmação em vez do detalhe do usuário — IDModuleCurrent (Módulo atual atualizado), TourSeen (Tour marcado como visto), HomeConfig (Preferências da home salvas) e DashboardConfig (Dashboard salvo). Enviados junto com outros campos, os quatro são simplesmente ignorados.

Resposta a convite (InviteAnswer). Também é atalho exclusivo: com { "InviteAnswer": { "IDUserCompanyInvite": <id>, "Action": "accept" } } (ou "decline") como único campo do corpo, a pessoa logada responde, de dentro do app, um convite para conta; o IDUserCompanyInvite vem do GET /user/{iduser} com Invite=1. Nada do cadastro é tocado, e o retorno é a resposta gravada (UserInviteAnswerResult). O {iduser} tem de ser o próprio usuário do token, e o convite tem de ser dele: o de outra pessoa responde Convite não encontrado, sem dizer que ele existe. Não exige privilégio.

  • accept: exige o convite pendente e no prazo de 7 dias, e o usuário e a conta que convidou ativos. Ativa o vínculo (Status 3 → 1) e aplica os perfis de acesso escolhidos no cadastro. Depois de aceitar, é preciso entrar de novo para acessar a nova conta: a lista de contas do token JWT só muda no login.
  • decline: recusa, inclusive convite vencido. O vínculo continua em Status 3, e a conta que convidou só pode convidar a pessoa de novo após 30 dias.

Responder um convite cancela os outros links pendentes do mesmo vínculo. Pelo link do e-mail, sem login, a resposta vai no POST /user/password-reset com Invite=1.

Request​

Responses​

Usuário atualizado. Retorna o detalhe completo (mesmo formato de GET /user/{iduser}).

Exceções — quando o corpo traz apenas um destes campos, a resposta é uma string:

  • IDModuleCurrent → Módulo atual atualizado
  • TourSeen → Tour marcado como visto (ou Tour ignorado quando a chave fica vazia após o saneamento)
  • HomeConfig → Preferências da home salvas (ou Home ignorada quando o corpo não é um objeto, ou Home sem alterações quando nenhuma chave é aproveitável)
  • DashboardConfig → Dashboard salvo

Com InviteAnswer como único campo do corpo, o retorno é o objeto UserInviteAnswerResult (a resposta ao convite).