# US13 - Gestão de Utilizadores **Como** Administrador do RefoodOne **Quero** poder visualizar e gerir as contas de utilizadores (voluntários, gestores de turno e administradores) do sistema **Para** controlar os perfis de acesso e atualizar as credenciais dos utilizadores de forma segura. ## Descrição do Fluxo Ao aceder ao sistema como administrador: 1. O utilizador encontra um novo submenu **Utilizadores** no menu dropdown principal **Gestão**. 2. Ao selecionar **Utilizadores**, é direcionado para o ecrã de listagem de utilizadores. 3. No ecrã de listagem, pode ver uma tabela contendo o **Nome de Utilizador** e o **Perfil (Role)** de cada conta registada. Cada linha tem uma opção/link para aceder ao detalhe do utilizador. 4. No ecrã de detalhe de um utilizador, o administrador pode: - Alterar o **Nome de Utilizador**. - Alterar o **Perfil** (selecionando numa lista dropdown as opções: *Administrador*, *Gestor de Turno*, *Voluntário*). - Definir uma nova password na secção correspondente, inserindo a nova password e confirmando a mesma num segundo campo (não sendo necessária a password antiga). 5. O administrador clica em Guardar para persistir as alterações na base de dados. ## Critérios de Aceitação ### 1. Interface Gráfica (UI) - **Menu Gestão**: Adicionar a ligação para "Utilizadores" no menu dropdown do cabeçalho principal. - **Ecrã de Listagem**: - Tabela com colunas: **Nome** (`username`) e **Perfil** (`role`). - Botão ou ligação para editar o detalhe em cada linha de utilizador. - **Ecrã de Detalhe**: - Campo de texto para o **Nome de Utilizador**. - Dropdown com as roles suportadas em PT-PT: - *Administrador* (`admin`) - *Gestor de Turno* (`shift_manager`) - *Voluntário* (`volunteer`) - Secção "Alterar Password" contendo dois campos de texto/password: **Nova Password** e **Confirmar Nova Password**. - Mensagens de erro/sucesso claras em português. ### 2. Comportamento e Regras de Negócio - Apenas utilizadores com a role `admin` podem aceder a estes ecrãs (tanto a listagem como o detalhe). - Se a secção de password for preenchida, o sistema deve validar se as duas passwords coincidem e se cumprem requisitos mínimos de segurança (ex: tamanho mínimo). - Se a secção de password for deixada em branco, o utilizador é guardado mantendo a password antiga sem alterações. - O ecrã de detalhe também deve permitir criar um utilizador novo (ou ter um fluxo correspondente) com os mesmos campos. ### 3. Integração de Dados / Segurança - **Segurança**: As novas passwords devem ser encriptadas de forma segura (ex: hashing) antes de guardar na tabela `users` da base de dados. - **Controlo de Acesso**: Bloqueio de acesso a nível de rotas no servidor (`hooks.server.ts` ou páginas locais) para utilizadores que não tenham perfil `admin`.