Newer
Older
book-metadata-service / src / main / resources / db / migration / V7__api_key_scope.sql
-- V7__api_key_scope.sql
-- Разграничение доступа для публичного запуска сервиса.
-- PUBLIC_READ   - только чтение через /api/v1/public/*, используется внутренним
--                 прокси-ключом сайта, никогда не выдаётся напрямую посетителям
-- PARTNER_WRITE - создание/обогащение карточек (POST /books, /enrichment/public/*)
-- ADMIN         - модерация LLM-предложений, /api/metadata/**, служебные операции

ALTER TABLE api_keys ADD COLUMN IF NOT EXISTS scope VARCHAR(20) NOT NULL DEFAULT 'PARTNER_WRITE';

-- Существующий dev-ключ оставляем с полным доступом, чтобы не сломать локальную разработку.
UPDATE api_keys SET scope = 'ADMIN' WHERE key_value = 'dev-local-key-change-me';

-- Внутренний публичный ключ для анонимного поиска с сайта.
-- Значение переопределяется в проде через book.api.public-api-key (см. application.yml) -
-- строка ниже - лишь дефолт для локальной разработки, чтобы стенд поднимался "из коробки".
INSERT INTO api_keys (org_id, key_value, label, scope)
VALUES (1, 'public-books-2024-change-me', 'Public web search (internal use only)', 'PUBLIC_READ')
ON CONFLICT (key_value) DO NOTHING;

CREATE INDEX IF NOT EXISTS idx_api_keys_scope ON api_keys(scope);