🔐

Controle de Acesso, Permissões e Planos – BarberBot

Permissões por nível (sessão) + regras por plano/assinatura.

Este módulo define quem acessa o quê dentro do BarberBot, usando: sessão (nível do usuário), tokens de autenticação e regras por assinatura/plano.

📁 Estrutura Relacionada (Banco + Sessão)

  • tabela: usuarios – contém o campo nivel (usado no controle de acesso)
  • tabela: usuarios_permissoes – permissões específicas por usuário (override)
  • tabela: acessos – catálogo de permissões/módulos (nome/chave/grupo)
  • tabela: grupo_acessos – agrupamento/regras por grupo (quando usado)
  • tabela: assinaturas, grupo_assinaturas, itens_assinaturas – regras por plano/assinatura

Na sessão (conforme teu código de login):

  • Admin/Prof: $_SESSION['id'], $_SESSION['nivel'], $_SESSION['nivel_usuario'], $_SESSION['aut_token_1010']
  • Cliente: $_SESSION['id'], $_SESSION['nome'], $_SESSION['aut_token_505052022']

🧭 Como Funciona (na prática)

  1. O usuário faz login e o sistema grava o nivel na sessão (ex.: Admin, Profissional, etc.).
  2. Para páginas do painel, o sistema deve checar:
    • se existe token de sessão (aut_token_1010 ou aut_token_505052022)
    • se o nivel permite acessar o módulo/rota
  3. Regras por plano/assinatura podem bloquear recursos premium, mesmo com login válido.
  4. A tabela usuarios_permissoes pode liberar/bloquear ações específicas por usuário.

🛠️ Exemplo de Validação (Painel Admin/Prof)

Exemplo simples (padrão) que usa o que teu login realmente grava:

<?php
session_start();

/* 1) Token obrigatório */
if (!isset($_SESSION['aut_token_1010'])) {
    header("Location: ../index.php");
    exit;
}

/* 2) Nível obrigatório (exemplo: só Admin) */
$nivel = $_SESSION['nivel'] ?? '';
if ($nivel !== 'Administrador' && $nivel !== 'Admin' && $nivel !== '1') {
    header("Location: ../bloqueio.php");
    exit;
}
?>

Observação: o valor de nivel pode ser string ou número (depende do que está salvo na tabela usuarios).

🧩 Exemplo de Validação (Painel Cliente)

<?php
session_start();

if (!isset($_SESSION['aut_token_505052022'])) {
    header("Location: ../index.php");
    exit;
}

/* Cliente autenticado */
$idCliente = $_SESSION['id'] ?? 0;
if (!$idCliente) {
    header("Location: ../index.php");
    exit;
}
?>

💳 Integração com Planos / Assinaturas

  • Quando o cliente tem assinatura ativa em assinaturas (pago e datas válidas), recursos podem ser liberados.
  • grupo_assinaturas e itens_assinaturas definem o “pacote” (básico/premium) e itens do plano.
  • Boa prática do projeto: se for bloquear recurso premium, manda para bloqueio.php com mensagem clara.

📌 Boas Práticas (sem frescura)

  • Checagem de token e nível sempre no início da página (antes de qualquer HTML).
  • Nunca proteger só no menu: protege também o arquivo PHP.
  • Centraliza a validação (include tipo verifica_login.php) para não repetir código.
  • Quando negar acesso: redireciona para bloqueio.php e registra log (se tiver logs).