prepare('SELECT COUNT(*) FROM usuarios WHERE perfil_id = ?'); $stmt->execute([$id]); if ((int) $stmt->fetchColumn() > 0) { $erro = 'Não é possível excluir: existem usuários com este perfil.'; } else { $pdo->prepare('DELETE FROM perfis WHERE id = ?')->execute([$id]); header('Location: perfis.php?excluido=1'); exit; } } if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['acao'] ?? '') === 'salvar') { $id = (int) ($_POST['id'] ?? 0); $nome = trim($_POST['nome'] ?? ''); $acesso_total = isset($_POST['acesso_total']) ? 1 : 0; $ativo = isset($_POST['ativo']) ? 1 : 0; $paginas_sel = array_map('intval', $_POST['paginas'] ?? []); if ($nome === '') { $erro = 'Informe o nome do perfil.'; } else { try { $pdo->beginTransaction(); if ($id > 0) { $stmt = $pdo->prepare('UPDATE perfis SET nome=?, acesso_total=?, ativo=? WHERE id=?'); $stmt->execute([$nome, $acesso_total, $ativo, $id]); } else { $stmt = $pdo->prepare('INSERT INTO perfis (nome, acesso_total, ativo) VALUES (?,?,?)'); $stmt->execute([$nome, $acesso_total, $ativo]); $id = (int) $pdo->lastInsertId(); } $pdo->prepare('DELETE FROM perfil_paginas WHERE perfil_id = ?')->execute([$id]); if (!$acesso_total && $paginas_sel) { $stmtIns = $pdo->prepare('INSERT INTO perfil_paginas (perfil_id, pagina_id) VALUES (?, ?)'); foreach ($paginas_sel as $pid) { $stmtIns->execute([$id, $pid]); } } $pdo->commit(); header('Location: perfis.php?salvo=1'); exit; } catch (PDOException $e) { $pdo->rollBack(); $erro = ($e->getCode() === '23000') ? 'Já existe um perfil com este nome.' : ('Erro ao salvar: ' . $e->getMessage()); } } } $editando = null; $paginas_do_perfil = []; if (isset($_GET['editar'])) { $stmt = $pdo->prepare('SELECT * FROM perfis WHERE id = ?'); $stmt->execute([(int) $_GET['editar']]); $editando = $stmt->fetch() ?: null; if ($editando) { $stmt2 = $pdo->prepare('SELECT pagina_id FROM perfil_paginas WHERE perfil_id = ?'); $stmt2->execute([$editando['id']]); $paginas_do_perfil = array_map('intval', array_column($stmt2->fetchAll(), 'pagina_id')); } } if (isset($_GET['salvo'])) $sucesso = 'Perfil salvo com sucesso.'; if (isset($_GET['excluido'])) $sucesso = 'Perfil excluído.'; $todas_paginas = $pdo->query('SELECT id, chave, nome FROM paginas WHERE ativo = 1 ORDER BY ordem, nome')->fetchAll(); $perfis = $pdo->query( 'SELECT pf.*, (SELECT COUNT(*) FROM usuarios u WHERE u.perfil_id = pf.id) AS total_usuarios FROM perfis pf ORDER BY pf.nome' )->fetchAll(); require __DIR__ . '/includes/header.php'; ?>

Perfis de acesso

Nenhuma página cadastrada ainda — cadastre em Páginas.

Cancelar
Perfis cadastrados
NomeAcessoUsuáriosStatus
Total' : 'Configurado' ?> Editar