Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Para quem estiver tendo o erro de arrays vazias, uma possível solução

Eu fiz o código o array das roles e permissoes retornavam vazios. Acompanhei a aula com o instrutor. Verifiquei o código várias vezes, olhei aqui no fórum, fiquei horas debatendo com o chatgpt kkkk e nada (tadinho a culpa não é dele, ele faz o que pode kkkkk). E dai percebi qual era o problema. Tem 4 usuários na minha tabela de usuários. Eu estava fazendo o login com o usuário número 4. Copiava o accessToken dele, para fazer o cadastro da ACL. Mas a Response (no caso estava usando o Thunder do vs code) retornava o usuário número 1. Eu não sei o porque de estar acontecendo isto. O que eu resolvi fazer, foi contornar este problema colocando manualmente o id do usuario que eu queria alterar na rota. Passo a passo:

Alterei o código da rota do acl (na aula acho que é seguranca.js na pasta routes) para que fosse inserido manualmente o id do usuário que eu queria alterar na rota (igual é com o get by id ou put ou delete):

router
  .post("/seguranca/acl/:usuarioId", SegurancaController.cadastrarAcl)

Depois na pasta controller eu fiz a alteração do segurancaController.js para ao inves de pegar o usuarioId do req, para que ele pegasse do req.params:

class SegurancaController {
  static async cadastrarAcl(req, res) {
    const { roles, permissoes } = req.body;
    const { usuarioId } = req.params;

E por último nas pasta services, no segurancaServices.js ficou faltando na const novo usuario um where id. Trecho:

const novoUsuario = await database.usuarios.findOne({
      where: {
        id: dto.usuarioId,
      },
      include: [
        {
          model: database.roles,
          as: "usuario_roles",
          attributes: ["id", "nome", "descricao"],
        },
        {
          model: database.permissoes,
          as: "usuario_permissoes",
          attributes: ["id", "nome", "descricao"],
        },
      ],
    });

    return novoUsuario;

Daí na rota é só preencher de acordo, lembrando de que agora tem que colocar o id do usuario na rota:

http://localhost:3000/seguranca/acl/:id

{
  "roles": [""],
  "permissoes": [""]
}

o meu resultado:

{
  "id": "12ebca7f-b78d-4c6b-b3ec-893984919629",
  "nome": "CDC",
  "email": "s@email.com",
  "createdAt": "2024-09-25T21:36:50.260Z",
  "updatedAt": "2024-09-25T21:36:50.260Z",
  "usuario_roles": [
    {
      "id": "5266f309-9d52-47d9-bb72-55e04c0116ad",
      "nome": "Gerente",
      "descricao": "Usuario gerente",
      "usuarios_roles": {
        "usuario_id": "12ebca7f-b78d-4c6b-b3ec-893984919629",
        "role_id": "5266f309-9d52-47d9-bb72-55e04c0116ad",
        "createdAt": "2024-10-09T00:58:57.836Z",
        "updatedAt": "2024-10-09T00:58:57.836Z"
      }
    }
  ],
  "usuario_permissoes": [
    {
      "id": "22c593a9-2da5-4bab-a89e-8f5d5ad8542a",
      "nome": "editar",
      "descricao": "poder editar produtos",
      "usuarios_permissoes": {
        "usuario_id": "12ebca7f-b78d-4c6b-b3ec-893984919629",
        "permissao_id": "22c593a9-2da5-4bab-a89e-8f5d5ad8542a",
        "createdAt": "2024-10-09T00:58:57.878Z",
        "updatedAt": "2024-10-09T00:58:57.878Z"
      }
    }
  ]
}

Quem quiser copiar o código do meu github, está aqui: https://github.com/FilipeDellaPorta/alura-seguranca-nodejs. Espero ter ajudado : )

Ahhh no meu código, vai ter uma função a mais de buscar acl. É que eu estava tentando ver se o problema era no cadastro ou na visualização...

1 resposta
solução!

Olá, estudante. Tudo bem?

Muito bom! Você conseguiu encontrar uma solução para o problema com arrays vazias ao trabalhar com roles e permissões na sua API. Às vezes, pequenos detalhes podem causar confusões, mas é ótimo ver que você conseguiu resolver a situação.

O que você fez ao modificar a rota para incluir manualmente o usuarioId nos parâmetros é uma abordagem prática. Isso garante que você está sempre lidando com o usuário correto ao fazer alterações nas permissões e roles, especialmente quando a resposta do seu sistema não está retornando o usuário esperado.

Essa abordagem deve ajudar a garantir que você está sempre atualizando as permissões e roles para o usuário correto. E a forma como você comentou o processo pode ser muito útil para outras pessoas que possam enfrentar um problema semelhante.

Obrigado pela sugestão, e bons estudos!