# Gestão de Alunos (AD) - LabInfo Sistema independente (sem WordPress) para habilitar/desabilitar contas de aluno no AD e resetar senha, com controle de acesso gerenciado pela própria aplicação. ## Deploy no pandora 1. No pandora, clonar o repositório (é privado — use uma chave SSH já autorizada no GitLab, ou um deploy token) direto em `/home/labinfo/`, de forma que `public_html/` deste projeto substitua (ou vire) o `/home/labinfo/public_html` do site, e `src/`, `config/`, `storage/`, `sql/` fiquem um nível acima dele (fora da árvore servida publicamente): ```bash git clone git@git.cachoeiro.ifes.edu.br:1652445/lab-info.git /home/labinfo/app ``` Depois ajuste os links/symlinks ou mova `public_html` conforme a estrutura real do docroot do site. 2. Criar as tabelas no banco: ```bash mysql -h -u '' -p < sql/schema.sql ``` 3. Criar `config/local.php` a partir de `config/config.example.php` preenchendo: - `db.pass` com a senha gerada pelo Puppet (me repassa por fora do catálogo). - `ldap.service_user` / `ldap.service_pass` com uma conta de serviço (peça delegação restrita à OU/grupo de alunos — não domain admin). - `app.session_secret` com `bin2hex(random_bytes(32))`. 4. Garantir que `storage/` tem permissão de escrita pelo usuário do PHP-FPM do site (para `audit.log`), e que `config/local.php` está fora do alcance público (confirmar que `.php` nunca é servido como texto puro — padrão do PHP já cobre isso). 5. Cadastrar o primeiro administrador direto no banco (seed), já que a tela de administradores exige estar logado como admin: ```sql INSERT INTO admins (login, papel, criado_por) VALUES ('', 'admin', 'seed'); ``` 6. Acessar `https://labinfo.cachoeiro.ifes.edu.br/`, logar com usuário/senha do AD e confirmar que o dashboard carrega os alunos do grupo configurado. ## Estrutura - `public_html/` — document root (único diretório exposto na web). - `src/` — classes PHP (LDAP, Auth, repositórios, log). - `config/` — config.example.php versionado; `local.php` (real) nunca versionado. - `sql/schema.sql` — schema do banco (admins, settings, audit_log, login_attempts). - `storage/` — log de auditoria em arquivo (complementar ao banco). ## Papéis - **admin**: tudo que operador pode, mais gerenciar `admins.php` e `settings.php`. - **operador**: só habilita/desabilita aluno e reseta senha no `dashboard.php`. A autenticação de quem usa o sistema é sempre feita com login e senha do próprio AD (bind LDAP) — o banco **não armazena nenhuma senha**. A tabela `admins` só guarda quem está autorizado a entrar e com qual papel (login, nome, papel), funcionando como uma lista de permissão: se o login/senha do AD estiverem corretos mas o login não estiver cadastrado (e ativo) em `admins`, o acesso ao sistema é negado mesmo assim. Não existe mais lista de SIAPE fixa no código — todo acesso é via tabela `admins`, editável pela tela (exceto o primeiro admin, que precisa de uma inserção manual inicial).