Admin Module
Overview
The Admin module provides comprehensive administrative functionality for managing the OdbVue system. It enables system administrators to monitor, audit, and control all aspects of the application including user management, access permissions, email delivery, job scheduling, system statistics, alerts, and configuration settings. The module enforces strict role-based access control (ADMIN role required) for all operations.
User Stories
- View Audit Logs: Admins can review complete system audit trail with filtering by user, severity, module, and date range to track system activities
- Manage Users: Admins can view user list, check user status (unverified/verified/suspended), review last access times, and navigate to detailed user profiles
- Manage Roles: Admins can view all available roles and their descriptions for the system
- Control Permissions: Admins can view and manage user permissions with time-based validity (start/end timestamps), assign roles with specific permissions to users, and track permission activity
- Track Emails: Admins can monitor email delivery status and diagnose email issues, view sender information and delivery attempts
- Control Jobs: Admins can view scheduled jobs with schedules and execution status, review job execution history with status and output, enable/disable jobs, and manually trigger job runs
- Monitor Statistics: Admins can review application metrics (users, data, activity) aggregated by multiple time periods (hourly to yearly)
- System Alerts: Admins receive alerts about system conditions and issues with alert types and values
- Configure Settings: Admins can update application configuration parameters including secret values with proper masking
Data Model
Core Tables
app_users: User account information
- Columns: id, uuid, username, email, fullname, status (N=unverified, A=active, D=suspended), created, accessed, attempts
- Primary role: User identity and authentication tracking
app_audit: System audit trail for compliance and monitoring
- Columns: id, severity (FATAL, ERROR, WARN, INFO, DEBUG), message, module, attributes (JSON), uuid (user ref), created
- Primary role: Complete system activity logging
app_roles: Role definitions for permission system
- Columns: id, role (unique), description
- Primary role: Define available roles in the system
app_permissions: User-role-permission assignments with time-based validity
- Columns: id, id_user (FK to app_users.id), id_role (FK to app_roles.id), permission (varchar2), valid_from (timestamp), valid_to (timestamp)
- Primary role: Granular permission management with time-based activation/expiration
- Composite Key: (id_user, id_role)
app_emails: Email delivery records and status tracking
- Columns: id, to_address, subject, content, status (PENDING, SENT, ERROR), created, delivered, attempts, error, message_id
- Primary role: Email delivery monitoring and diagnostics
app_stats: Application metrics by period
- Columns: period_type (H, D, W, M, Q, Y, A), period_label, metric_name, metric_value
- Period types: H (hourly), D (daily), W (weekly), M (monthly), Q (quarterly), Y (yearly), A (all-time)
- Primary role: Time-series application metrics
app_alerts: System alerts and notifications
- Columns: alert_type, alert_text, alert_value, created
- Primary role: Alert management and system health monitoring
app_settings: Application configuration parameters
- Columns: key, name, value, secret (boolean), options (JSON)
- Primary role: Application configuration management
API
All endpoints require ADMIN role. Access is validated at procedure entry point via pck_api_auth.role(NULL, 'ADMIN') returning HTTP 401 if unauthorized.
Audit
GET /adm/audit/- Get audit logs with filtering and pagination- Filters: uuid (array), username (array), severity (array), module (array), period_from (timestamp), period_to (timestamp)
- Parameters: limit (default 10), offset (default 0)
Users
GET /adm/users/- Get user list with search and pagination- Parameters: search (username), limit (default 10), offset (default 0)
- Response: username, fullname, created, accessed, status, status_text
Roles
GET /adm/roles/- Get list of available roles- Parameters: search, limit (default 10), offset (default 0)
- Response: role, description
Permissions
GET /adm/permissions/- Get user permissions with filtering and pagination- Filters: uuid (array of user UUIDs)
- Parameters: search, limit (default 10), offset (default 0)
- Response: id, uuid, role, permission, active (Y/N based on valid_from/valid_to), from (timestamp), to (timestamp)
POST /adm/permission/- Set user permission (assign permission to user with time validity)- Parameters: uuid (user), role, permission, from (start timestamp), to (end timestamp)
- Response: validation errors if any
Emails
GET /adm/emails/- Get email logs with filtering and pagination- Filters: status (array), period_from (timestamp), period_to (timestamp)
- Parameters: limit (default 10), offset (default 0)
- Response: id, created, to_address, subject, status, message_id
Jobs
GET /adm/jobs/- Get scheduled jobs list with execution status- Parameters: search (job name), limit (default 10), offset (default 0)
- Response: name, schedule, started, duration, comments, enabled
GET /adm/jobs-history/- Get job execution history with filtering- Filters: name (array of job names)
- Parameters: limit (default 10), offset (default 0)
- Response: name, started, duration, status, output
POST /adm/job-enable/- Enable a scheduled job- Parameters: name (job name)
POST /adm/job-disable/- Disable a scheduled job- Parameters: name (job name)
POST /adm/job-run/- Manually trigger job execution- Parameters: name (job name)
Settings
GET /adm/settings/- Get application settings- Parameters: search (setting name), limit (default 10), offset (default 0)
- Response: key, name, value (masked if secret=true), secret, options
POST /adm/setting/- Update application setting- Parameters: id (setting key), value (new value)
- Response: validation errors if any
Statistics & Alerts
GET /adm/stats/- Get application statistics by period- Response: period_type, period_label, metric_name, metric_value
GET /adm/alerts/- Get system alerts- Response: alert_type, alert_text, alert_value, created
UI Views (Pages)
Dashboard (
/admin) - Overview with charts and alert widgets- Displays metrics chart with selectable metric types and configurable time periods
- Shows alert status cards with alert types and values
- Provides quick navigation cards to all admin sections (audit, users, roles, permissions, emails, jobs, settings)
- Responsive grid layout with primary metrics on left, alerts on right
Users List (
/admin/users) - User management- Table view of all users with username, full name, created date, last accessed, status
- Status formatting: Unverified (warning), Verified (success), Suspended (error)
- Search by username
- Navigate to user detail page via UUID
User Details (
/admin/users/[uuid]) - User profile with tabs- Details Tab: User information (username, fullname, dates, status)
- Permissions Tab: User's assigned permissions with role, permission name, active status, and valid date range
- Audit Tab: User-specific audit log entries
- Emails Tab: User-related email records
Audit Logs (
/admin/audit) - System audit trail- Table of all audit entries with created date, severity, module, username, and message
- Severity color coding: ERROR (red), WARN (orange), INFO (blue)
- Filterable by severity, module, username, and date range
- View JSON attributes for audit entries
- Sortable by created timestamp
Email Logs (
/admin/emails) - Email delivery monitoring- Table of email records with created date, recipient, subject, status, and message ID
- Status indicators (PENDING, SENT, ERROR)
- Filterable by status and date range
- Display complete email content when needed
Jobs (
/admin/jobs) - Job scheduler management- Table view of scheduled jobs showing name, schedule expression, last started, duration, comments, and enabled status
- Action buttons to enable, disable, or manually run jobs
- Success/error notifications for job actions
- Navigate to job details page to view execution history
Job History (
/admin/jobs/[name]) - Job execution history- Table of job execution records showing name, started timestamp, duration, status, and output
- Display detailed execution output for each job run
- Navigate back to jobs list
Settings (
/admin/settings) - Application configuration- Table view of all settings with key, name, and value
- Secret values are masked/hidden in display
- Action buttons to edit settings
- Real-time validation and error display on update
- Support for options field (JSON) for settings with multiple choices
Security
Access Control:
- All admin module endpoints and UI pages require ADMIN role
- Role validation performed at database procedure entry point via
pck_api_auth.role(NULL, 'ADMIN') - HTTP 401 returned if user lacks ADMIN role
- Prevents unauthorized access through both API and UI
Page Meta Security:
- All admin pages define meta configuration:
access: 'with-role'- Requires authentication with rolevisibility: 'with-role'- Only visible to users with specified rolesroles: ['admin']- Explicitly requires admin role
- Router guards enforce these restrictions before page rendering
Package Body Security:
- Each procedure in
pck_adm.sqlvalidates ADMIN role at entry - Non-admin access immediately returns HTTP 401 without processing request
- Prevents data leakage through query execution
Data Protection:
- Sensitive settings marked with
secret: trueare masked in UI display - Permission time-based validity prevents unauthorized access windows
- Audit logging tracks all admin activities for compliance
Jobs
ADM_STATS_JOB - Application statistics aggregation
- Program: ADM_STATS_PROGRAM
- Schedule: ADM_STATS_SCHEDULE
- Function: Executes pck_adm.job_stats procedure
- Purpose: Aggregates and refreshes application statistics across all time periods (hourly through yearly and all-time)
- Auto-drop: TRUE (automatically drops after completion)
- Logging: Off (logging_level = logging_off)
- Priority: 3 (job_priority)
ADN_ALERTS_JOB - Alert status refresh
- Program: ADN_ALERTS_PROGRAM
- Schedule: ADN_ALERTS_SCHEDULE
- Function: Executes pck_adm.job_alerts procedure
- Purpose: Checks system conditions and refreshes alert records for admin monitoring
- Auto-drop: TRUE (automatically drops after completion)
- Logging: Off (logging_level = logging_off)
- Priority: 3 (job_priority)
- Populates app_stats table for dashboard visualization
- Priority 3, logging disabled
adm_alerts_job - Checks for system conditions requiring alerts
- Evaluates alert conditions and updates app_alerts
- Triggered by scheduler