v1.7.1: 멤버 권한·추천 사이트·네비게이션 UI 개선

관리자는 VIP·멤버만 수정 가능하도록 서버·UI 권한을 정리하고 소유자 권한 이전 API와 확인 모달을 추가했다. 추천 사이트 파비콘 캐시·URL 접두사·카드 편집 UI를 보강하고 확인 얼럿을 AdminConfirmModal로 통일했다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-17 14:32:11 +09:00
parent f206499f99
commit 5b2ed97748
30 changed files with 1837 additions and 211 deletions

View File

@@ -137,7 +137,7 @@ const isAvatarUrlReferencedByProfile = async (url) => {
/**
* URL 목록에 대해 아바타를 사용 중인 회원 정보를 조회한다.
* @param {Array<string>} urls - 미디어 URL 목록
* @returns {Promise<Map<string, { id: string, username: string, email: string, lastSeenAt: string | null, lastSeenIp: string }>>} URL별 회원 요약
* @returns {Promise<Map<string, { id: string, username: string, email: string, roleCode: string, lastSeenAt: string | null, lastSeenIp: string }>>} URL별 회원 요약
*/
const getAvatarOwnersByUrls = async (urls) => {
const sql = getPostgresClient()
@@ -152,6 +152,7 @@ const getAvatarOwnersByUrls = async (urls) => {
id,
username,
email,
user_role AS "roleCode",
last_seen_at,
last_seen_ip,
avatar_url
@@ -169,6 +170,7 @@ const getAvatarOwnersByUrls = async (urls) => {
id: row.id,
username: row.username,
email: row.email,
roleCode: String(row.roleCode || 'member'),
lastSeenAt: row.last_seen_at ? row.last_seen_at.toISOString() : null,
lastSeenIp: row.last_seen_ip || ''
})