Eliminar uma função
Qualquer função menos a de proprietário, e só depois de ter dito para onde vão os seus detentores.
Executa a chamada real contra o seu espaço de trabalho, com a sua própria chave.
DELETE /roles/{id}
Qualquer função menos a de proprietário, e só depois de ter dito para onde vão os seus detentores.
Exemplo
Requer roles:write. reassignTo nomeia a função para a qual passam todos os membros e todas as chaves de API que estão nesta.
curl -X DELETE "$OE/roles/role_2b81de079c1f0a4b7e05d386?reassignTo=role_c40a95f21cc65d31c2a89e07" \ -H "$AUTH"{ "object": "role", "id": "role_2b81de079c1f0a4b7e05d386", "deleted": true, "reassigned": 3, "keysReassigned": 1}reassignTo viaja como parâmetro de query e não no corpo. Um corpo num DELETE é legal e largamente não suportado (vários runtimes descartam-no, tal como um bom número de proxies), e um reassignTo descartado é indistinguível de um que nunca foi enviado, que é precisamente o caso que este endpoint recusa em vez de adivinhar.
É obrigatório a partir do momento em que alguém tem a função: sem ele, role_in_use, um 409, com param: "reassignTo", que é a correção concreta. Por baixo a coluna é ON DELETE RESTRICT, por isso não há caminho em que eliminar uma função altere em silêncio o que alguém pode fazer.
As chaves de API são reapontadas em vez de ficarem órfãs, e essa é a metade subtil. Uma chave cuja função desaparecesse cairia para um tecto NULL, e um tecto nulo é MAIS AMPLO do que a função que acabou de desaparecer, por isso eliminar uma função restritiva promoveria em silêncio todas as chaves que ela limitava.
As duas contagens estão separadas porque são duas coisas diferentes a ir verificar: reassigned são pessoas, que vão dar por isso, e keysReassigned são programas, que não vão.
A função de proprietário não pode ser eliminada (role_undeletable, um 409) porque nomeia a conta em que o espaço de trabalho está ancorado e não um trabalho que alguém faça. Todas as outras funções podem desaparecer, as pré-criadas Admin, Member, Viewer, Developer e Billing tanto como uma que alguém escreveu: são um ponto de partida, e um espaço de trabalho sem integrações não tem uso para uma linha Developer de que não é autorizado a livrar-se. Verifique deletable antes de oferecer o botão; só o proprietário responde false.
Eliminar uma função PRÉ-CRIADA não é permanente, por isso não redija o diálogo como se fosse. GET /roles volta a criar a linha modelo que estiver em falta, e uma eliminação não deixa lápide, por isso a leitura seguinte da lista põe Developer de volta com um id novo. Mudar-lhe o nome é o que a faz deixar de voltar (uma linha renomeada mantém o seu builtin e continua a conflituar com o modelo), ou então outra função ficar com o nome, já que o processo de pré-criação salta uma linha cujo nome já está ocupado.