-- Permissible table: polymorphic association between platform_apps and Account/User/AgentBot -- Reference: Chatwoot permissible model (used for access control scoping) CREATE TABLE IF NOT EXISTS permissibles ( id SERIAL PRIMARY KEY, platform_app_id INTEGER NOT NULL REFERENCES platform_apps(id) ON DELETE CASCADE, permissible_type VARCHAR(100) NOT NULL, permissible_id INTEGER NOT NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Unique constraint: one permissible entry per (platform_app, type, id) combination CREATE UNIQUE INDEX IF NOT EXISTS idx_permissibles_unique ON permissibles(platform_app_id, permissible_type, permissible_id); -- Indexes for lookup performance CREATE INDEX IF NOT EXISTS idx_permissibles_platform_app_id ON permissibles(platform_app_id); CREATE INDEX IF NOT EXISTS idx_permissibles_permissible_type ON permissibles(permissible_type); CREATE INDEX IF NOT EXISTS idx_permissibles_permissible_id ON permissibles(permissible_id);