AC
Vamos implementar na nossa rede social um sistema de grupos. Onde nos grupos haverão membros e esses membros terão cargos. Para o controle de permissões do que o membro pode fazer no grupo, teremos os seguintes cargos:
- Administrador (
administrator
): Tem permissão total no grupo, inclusive de alterar configurações e promover outros administradores; - Moderador (
moderator
): Pode gerenciar membros e mensagens no grupo, além de poder promover membros à colaboradores; - Colaborador (
colaborator
): Pode adicionar novos membros ao grupo; - Membro (
member
): Pode enviar mensagens no grupo.
Os cargos mais altos têm também as permissões dos cargos mais baixos. Todos os administradores têm igual poder no grupo, sendo todos juntos “donos” do grupo. Como é possível que todos os administradores saiam de um grupo e, assim, o grupo fique sem administradores; vamos adicionar uma permissão especial de um moderador poder se promover para administrador caso não haja nenhum administrador no grupo. Assim garantindo que o grupo possa continuar funcionando mesmo que os administradores atuais abandonem ele.
Na API, os seguintes endpoints serão adicionados para o gerenciamento de grupos e membros:
POST /groups
Cria um novo grupo.
Exemplo de request:
{
"name": "My Group",
"description": "..."
}
POST /groups/{group_id}/members
Adiciona um novo membro ao grupo. Onde:
administrator
: Pode usar sem restrição.moderator
: Só pode adicionar membros com cargomember
oucolaborator
.colaborator
: Só pode adicionar membros com cargomember
.member
: Não pode usar o endpoint.
Exemplo de request:
{
"user_id": 123456,
"role": "member"
}
POST /groups/{group_id}/quit
Remove sua própria conta do grupo.
POST /groups/{group_id}/promote
Somente o cargo moderator
pode usar esse
endpoint. Onde se o grupo não tiver mais nenhum
membro com o cargo administrator
, o moderador
poderá se promover à administrador usando esse
endpoint.
Se houver pelo menos um membro de cargo
administrator
no grupo, então nada será feito
por esse endpoint.
POST /groups/{group_id}/members/{user_id}/ban
Bane o membro do grupo. O cargo moderator
e
acima tem permissão para usar esse endpoint.
POST /groups/{group_id}/members/{user_id}/kick
Remove o membro do grupo. O cargo moderator
e acima tem permissão para usar esse endpoint.
POST /groups/{group_id}/members/{user_id}/silence
Silencia o membro pela quantidade de dias especificados.
O cargo moderator
e acima tem permissão para
usar esse endpoint.
Exemplo de request:
{
"days": 1
}
PATCH /groups/{group_id}/members/{user_id}
Altera o cargo do membro no grupo. O cargo
administrator
tem permissão para usar esse
endpoint sem restrições. O cargo
moderator
pode somente alterar o cargo para
colaborator
ou member
. Outros
cargos não podem usar esse endpoint.
Exemplo de request:
{
"role": "colaborator"
}