48 lines
1.5 KiB
SQL
48 lines
1.5 KiB
SQL
CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
|
|
|
CREATE TABLE users (
|
|
id SERIAL PRIMARY KEY,
|
|
username VARCHAR(255) UNIQUE NOT NULL,
|
|
password_hash TEXT NOT NULL,
|
|
permissions_mask TEXT NOT NULL DEFAULT '0',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE permissions (
|
|
id SERIAL PRIMARY KEY,
|
|
name VARCHAR(255) UNIQUE NOT NULL,
|
|
bit_value TEXT UNIQUE NOT NULL,
|
|
description TEXT
|
|
);
|
|
|
|
CREATE TABLE queries (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
identifier VARCHAR(255) UNIQUE NOT NULL,
|
|
sql_template TEXT NOT NULL,
|
|
description TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE blacklist (
|
|
id SERIAL PRIMARY KEY,
|
|
pattern VARCHAR(500) NOT NULL,
|
|
method VARCHAR(10),
|
|
reason TEXT,
|
|
active BOOLEAN NOT NULL DEFAULT true,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- Seed permissions
|
|
INSERT INTO permissions (name, bit_value, description) VALUES
|
|
('READ', '1', 'Can read via CRUD endpoints'),
|
|
('WRITE', '2', 'Can insert/update via CRUD'),
|
|
('DELETE', '4', 'Can delete via CRUD'),
|
|
('ADMIN_QUERY', '8', 'Can manage query registry'),
|
|
('ADMIN_CACHE', '16', 'Can manage cache'),
|
|
('SUPER_ADMIN', '32', 'Full access');
|
|
|
|
-- Seed blacklist (users and permissions tables are admin-only)
|
|
INSERT INTO blacklist (pattern, method, reason, active) VALUES
|
|
('/api/users/**', NULL, 'admin-only table', true),
|
|
('/api/permissions/**', NULL, 'admin-only table', true);
|