Refactor database configuration and user management
- Updated .env.example to consolidate SQL Server credentials under PANEL_MSSQL_* variables. - Removed deprecated docker-compose.postgres.yml file. - Adjusted docker-compose.yml to utilize new SQL Server credential structure. - Enhanced README.md with Docker build and push instructions. - Refined database schema in schema.sql to align with new user and permission structures. - Updated init-database.js to reflect changes in user and session table names. - Modified user management functions in users.ts to accommodate new database schema. - Streamlined API routes to utilize PostgreSQL for user and database management. - Improved error handling and logging in various server routes.
This commit is contained in:
@@ -1,55 +1,58 @@
|
||||
-- Schema para sistema de usuarios y permisos
|
||||
-- Ejecutar en PostgreSQL (base de datos CONTROLDESK)
|
||||
-- Panel Transmitiras: usuarios, permisos y sesiones (mismo modelo que
|
||||
-- ~/dev/a24c/backend/api/v1/modules/dashboard — tablas en inglés, esquema a24c).
|
||||
-- Ejecutar en PostgreSQL (misma base donde está el catálogo ControlDesk, p. ej. CONTROLDESK).
|
||||
|
||||
-- Tabla de usuarios
|
||||
CREATE TABLE IF NOT EXISTS usuarios (
|
||||
id SERIAL PRIMARY KEY,
|
||||
username VARCHAR(50) UNIQUE NOT NULL,
|
||||
email VARCHAR(100) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
nombre_completo VARCHAR(100),
|
||||
activo BOOLEAN DEFAULT true,
|
||||
es_admin BOOLEAN DEFAULT false,
|
||||
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
ultimo_acceso TIMESTAMP,
|
||||
CONSTRAINT chk_username_length CHECK (char_length(username) >= 3)
|
||||
CREATE SCHEMA IF NOT EXISTS a24c;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS a24c.dashboard_users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
username VARCHAR(50) UNIQUE NOT NULL,
|
||||
email VARCHAR(100) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
full_name VARCHAR(100),
|
||||
is_active BOOLEAN NOT NULL DEFAULT true,
|
||||
is_admin BOOLEAN NOT NULL DEFAULT false,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
last_access_at TIMESTAMPTZ,
|
||||
CONSTRAINT chk_dashboard_users_username_length CHECK (char_length(username) >= 3)
|
||||
);
|
||||
|
||||
-- Tabla de permisos de usuario a bases de datos
|
||||
CREATE TABLE IF NOT EXISTS usuario_base_datos (
|
||||
id SERIAL PRIMARY KEY,
|
||||
usuario_id INTEGER NOT NULL REFERENCES usuarios(id) ON DELETE CASCADE,
|
||||
base_datos_nombre VARCHAR(255) NOT NULL, -- Nombre de la base de datos (visible_name)
|
||||
puede_ver BOOLEAN DEFAULT true,
|
||||
puede_descargar_backup BOOLEAN DEFAULT false,
|
||||
puede_restaurar BOOLEAN DEFAULT false,
|
||||
fecha_asignacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE(usuario_id, base_datos_nombre)
|
||||
CREATE TABLE IF NOT EXISTS a24c.dashboard_user_database_permissions (
|
||||
id SERIAL PRIMARY KEY,
|
||||
dashboard_user_id INTEGER NOT NULL REFERENCES a24c.dashboard_users (id) ON DELETE CASCADE,
|
||||
database_name VARCHAR(255) NOT NULL,
|
||||
can_view BOOLEAN NOT NULL DEFAULT true,
|
||||
can_download_backup BOOLEAN NOT NULL DEFAULT false,
|
||||
can_restore BOOLEAN NOT NULL DEFAULT false,
|
||||
assigned_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
UNIQUE (dashboard_user_id, database_name)
|
||||
);
|
||||
|
||||
-- Tabla de sesiones
|
||||
CREATE TABLE IF NOT EXISTS sesiones (
|
||||
id SERIAL PRIMARY KEY,
|
||||
usuario_id INTEGER NOT NULL REFERENCES usuarios(id) ON DELETE CASCADE,
|
||||
token VARCHAR(255) UNIQUE NOT NULL,
|
||||
ip_address VARCHAR(50),
|
||||
user_agent TEXT,
|
||||
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
fecha_expiracion TIMESTAMP NOT NULL,
|
||||
activa BOOLEAN DEFAULT true
|
||||
CREATE TABLE IF NOT EXISTS a24c.dashboard_sessions (
|
||||
id SERIAL PRIMARY KEY,
|
||||
dashboard_user_id INTEGER NOT NULL REFERENCES a24c.dashboard_users (id) ON DELETE CASCADE,
|
||||
token VARCHAR(255) UNIQUE NOT NULL,
|
||||
ip_address VARCHAR(50),
|
||||
user_agent TEXT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
expires_at TIMESTAMPTZ NOT NULL,
|
||||
is_active BOOLEAN NOT NULL DEFAULT true
|
||||
);
|
||||
|
||||
-- Índices para mejor rendimiento
|
||||
CREATE INDEX IF NOT EXISTS idx_usuario_base_datos_usuario ON usuario_base_datos(usuario_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_usuario_base_datos_nombre ON usuario_base_datos(base_datos_nombre);
|
||||
CREATE INDEX IF NOT EXISTS idx_usuarios_activo ON usuarios(activo);
|
||||
CREATE INDEX IF NOT EXISTS idx_sesiones_token ON sesiones(token);
|
||||
CREATE INDEX IF NOT EXISTS idx_sesiones_usuario ON sesiones(usuario_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_a24c_dashboard_user_db_perm_user
|
||||
ON a24c.dashboard_user_database_permissions (dashboard_user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_a24c_dashboard_user_db_perm_dbname
|
||||
ON a24c.dashboard_user_database_permissions (database_name);
|
||||
CREATE INDEX IF NOT EXISTS idx_a24c_dashboard_users_active ON a24c.dashboard_users (is_active);
|
||||
CREATE INDEX IF NOT EXISTS idx_a24c_dashboard_sessions_token ON a24c.dashboard_sessions (token);
|
||||
CREATE INDEX IF NOT EXISTS idx_a24c_dashboard_sessions_user ON a24c.dashboard_sessions (dashboard_user_id);
|
||||
|
||||
-- Insertar usuario admin por defecto
|
||||
-- Password: Admin123!
|
||||
-- Nota: Este hash es temporal, debes cambiarlo después del primer inicio de sesión
|
||||
INSERT INTO usuarios (username, email, password_hash, nombre_completo, es_admin, activo)
|
||||
COMMENT ON TABLE a24c.dashboard_users IS 'Operadores del panel Transmitiras (JWT/bcrypt). Paridad api/v1/modules/dashboard/users.';
|
||||
COMMENT ON TABLE a24c.dashboard_user_database_permissions IS 'Permisos por base de datos. Paridad dashboard/user_database_permissions.';
|
||||
COMMENT ON TABLE a24c.dashboard_sessions IS 'Sesiones persistidas (opcional; el panel usa JWT en cookie). Paridad dashboard/sessions.';
|
||||
|
||||
-- Usuario admin por defecto (cambiar password_hash tras primer arranque; ver scripts/generate-password-hash.js)
|
||||
INSERT INTO a24c.dashboard_users (username, email, password_hash, full_name, is_admin, is_active)
|
||||
VALUES (
|
||||
'admin',
|
||||
'admin@aduanasoft.com',
|
||||
@@ -59,8 +62,3 @@ VALUES (
|
||||
true
|
||||
)
|
||||
ON CONFLICT (username) DO NOTHING;
|
||||
|
||||
-- Comentarios en tablas
|
||||
COMMENT ON TABLE usuarios IS 'Usuarios del sistema de gestión de bases de datos';
|
||||
COMMENT ON TABLE usuario_base_datos IS 'Permisos de acceso de usuarios a bases de datos específicas';
|
||||
COMMENT ON TABLE sesiones IS 'Sesiones activas de usuarios';
|
||||
|
||||
Reference in New Issue
Block a user