-- 0023 · place_posts.edit_token_hash — 메일의 "고쳐서 올리려면" 링크를 일회용 코드로. -- -- ★ 예전에는 그 링크에 **빌더 액세스 토큰 통짜**(sub 에 UserInfo 전체 — role 포함)를 -- 쿼리로 실어 보냈다. 주소가 500자였던 것은 그 때문이고, 길이보다 나쁜 것은 따로 있다: -- 메일을 한 번 전달하면 **그날 자정까지 빌더 권한이 그대로 넘어간다.** 브라우저 히스토리 · -- 앞단 프록시 로그 · Referer 에도 그대로 남는다. -- (SNS 승인 흐름에서는 같은 이유로 "기존 액세스 토큰을 승인 링크에 얹지 않는다" 를 -- 설계 원칙으로 박아 뒀는데, 이 경로에만 남아 있었다.) -- -- ★ 승인 토큰(approve_token_hash)과 같은 규약이다 — 평문은 메일 본문에만 있고 DB 에는 -- sha256 만 둔다. 만료는 token_expires_at 을 같이 쓴다(두 링크가 같은 시각에 죽는다). ALTER TABLE public.place_posts ADD COLUMN IF NOT EXISTS edit_token_hash varchar(64); -- 링크 한 번에 한 행을 집는다. 승인 토큰과 같은 이유로 부분 인덱스다. CREATE INDEX IF NOT EXISTS ix_place_posts_edit_token ON public.place_posts(edit_token_hash) WHERE deleted = false AND edit_token_hash IS NOT NULL;