- Increased all sidebar navigation icons from text-sm to text-xl for better visibility - Moved user information and logout button from header to sidebar footer - Added user avatar with name and email in expanded sidebar state - Collapsed sidebar shows avatar icon and logout icon button stacked vertically - Simplified header by removing user badge and logout button - Added version info (v1.0.0) in sidebar footer - Improved responsive design for both collapsed and expanded states
67 lines
2.6 KiB
SQL
67 lines
2.6 KiB
SQL
-- Schema para sistema de usuarios y permisos
|
|
-- Ejecutar en PostgreSQL (base de datos 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)
|
|
);
|
|
|
|
-- 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)
|
|
);
|
|
|
|
-- 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
|
|
);
|
|
|
|
-- Í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);
|
|
|
|
-- 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)
|
|
VALUES (
|
|
'admin',
|
|
'admin@aduanasoft.com',
|
|
'$2b$10$rKvvkYpNwF5J5K5J5J5J5uX5X5X5X5X5X5X5X5X5X5X5X5X5X5X5X',
|
|
'Administrador del Sistema',
|
|
true,
|
|
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';
|