128 lines
4.8 KiB
MySQL
128 lines
4.8 KiB
MySQL
|
|
-- Phase 1: External Role Management Module System
|
||
|
|
-- Creates base schema for persona_types, external_roles, modules, role_module_access, module_actions, role_module_permissions
|
||
|
|
|
||
|
|
-- ============================================
|
||
|
|
-- persona_types
|
||
|
|
-- ============================================
|
||
|
|
CREATE TABLE IF NOT EXISTS persona_types (
|
||
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
code varchar(50) UNIQUE NOT NULL,
|
||
|
|
name varchar(100) NOT NULL,
|
||
|
|
description text,
|
||
|
|
is_active boolean DEFAULT true,
|
||
|
|
created_at timestamptz DEFAULT NOW(),
|
||
|
|
updated_at timestamptz DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
-- ============================================
|
||
|
|
-- external_roles
|
||
|
|
-- ============================================
|
||
|
|
CREATE TABLE IF NOT EXISTS external_roles (
|
||
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
role_code varchar(50) UNIQUE NOT NULL,
|
||
|
|
role_name varchar(100) NOT NULL,
|
||
|
|
persona_type_id uuid REFERENCES persona_types(id),
|
||
|
|
description text,
|
||
|
|
is_active boolean DEFAULT true,
|
||
|
|
onboarding_schema_key varchar(100),
|
||
|
|
verification_required boolean DEFAULT true,
|
||
|
|
switch_services_enabled boolean DEFAULT false,
|
||
|
|
is_publicly_discoverable boolean DEFAULT true,
|
||
|
|
sort_order integer DEFAULT 0,
|
||
|
|
created_at timestamptz DEFAULT NOW(),
|
||
|
|
updated_at timestamptz DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_external_roles_persona ON external_roles(persona_type_id);
|
||
|
|
CREATE INDEX idx_external_roles_active ON external_roles(is_active);
|
||
|
|
|
||
|
|
-- ============================================
|
||
|
|
-- modules
|
||
|
|
-- ============================================
|
||
|
|
CREATE TABLE IF NOT EXISTS modules (
|
||
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
module_key varchar(50) UNIQUE NOT NULL,
|
||
|
|
module_name varchar(100) NOT NULL,
|
||
|
|
category varchar(50), -- core/content/marketplace/work/financial
|
||
|
|
description text,
|
||
|
|
backend_domain varchar(100),
|
||
|
|
default_route varchar(255),
|
||
|
|
default_sidebar_label varchar(100),
|
||
|
|
icon_key varchar(50),
|
||
|
|
is_core boolean DEFAULT false,
|
||
|
|
is_active boolean DEFAULT true,
|
||
|
|
created_at timestamptz DEFAULT NOW(),
|
||
|
|
updated_at timestamptz DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_modules_category ON modules(category);
|
||
|
|
CREATE INDEX idx_modules_active ON modules(is_active);
|
||
|
|
|
||
|
|
-- ============================================
|
||
|
|
-- role_module_access
|
||
|
|
-- ============================================
|
||
|
|
CREATE TABLE IF NOT EXISTS role_module_access (
|
||
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
external_role_id uuid NOT NULL REFERENCES external_roles(id) ON DELETE CASCADE,
|
||
|
|
module_id uuid NOT NULL REFERENCES modules(id) ON DELETE CASCADE,
|
||
|
|
is_enabled boolean DEFAULT true,
|
||
|
|
is_sidebar_visible boolean DEFAULT true,
|
||
|
|
sidebar_label_override varchar(100),
|
||
|
|
route_override varchar(255),
|
||
|
|
sort_order integer DEFAULT 0,
|
||
|
|
created_at timestamptz DEFAULT NOW(),
|
||
|
|
UNIQUE(external_role_id, module_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_role_module_access_role ON role_module_access(external_role_id);
|
||
|
|
|
||
|
|
-- ============================================
|
||
|
|
-- module_actions
|
||
|
|
-- ============================================
|
||
|
|
CREATE TABLE IF NOT EXISTS module_actions (
|
||
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
module_id uuid NOT NULL REFERENCES modules(id) ON DELETE CASCADE,
|
||
|
|
action_key varchar(50) NOT NULL,
|
||
|
|
action_name varchar(100) NOT NULL,
|
||
|
|
description text,
|
||
|
|
is_active boolean DEFAULT true,
|
||
|
|
created_at timestamptz DEFAULT NOW(),
|
||
|
|
UNIQUE(module_id, action_key)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_module_actions_module ON module_actions(module_id);
|
||
|
|
|
||
|
|
-- ============================================
|
||
|
|
-- role_module_permissions
|
||
|
|
-- ============================================
|
||
|
|
CREATE TABLE IF NOT EXISTS role_module_permissions (
|
||
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
external_role_id uuid NOT NULL REFERENCES external_roles(id) ON DELETE CASCADE,
|
||
|
|
module_id uuid NOT NULL REFERENCES modules(id) ON DELETE CASCADE,
|
||
|
|
can_view boolean DEFAULT false,
|
||
|
|
can_list boolean DEFAULT false,
|
||
|
|
can_create boolean DEFAULT false,
|
||
|
|
can_update boolean DEFAULT false,
|
||
|
|
can_delete boolean DEFAULT false,
|
||
|
|
extra_actions_json jsonb DEFAULT '{}',
|
||
|
|
created_at timestamptz DEFAULT NOW(),
|
||
|
|
UNIQUE(external_role_id, module_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_role_module_permissions_role ON role_module_permissions(external_role_id);
|
||
|
|
|
||
|
|
-- ============================================
|
||
|
|
-- role_module_widgets
|
||
|
|
-- ============================================
|
||
|
|
CREATE TABLE IF NOT EXISTS role_module_widgets (
|
||
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
external_role_id uuid NOT NULL REFERENCES external_roles(id) ON DELETE CASCADE,
|
||
|
|
module_id uuid NOT NULL REFERENCES modules(id) ON DELETE CASCADE,
|
||
|
|
widget_key varchar(50),
|
||
|
|
is_enabled boolean DEFAULT true,
|
||
|
|
sort_order integer DEFAULT 0,
|
||
|
|
created_at timestamptz DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_role_module_widgets_role ON role_module_widgets(external_role_id);
|