From 710229879ecd5adbb24e2b0bfe61b8a8ab7c9831 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 23 Oct 2026 17:17:28 +0900 Subject: [PATCH] Use SSO session for own post filter --- egbim/app.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/egbim/app.js b/egbim/app.js index 53d99fc..facd64e 100644 --- a/egbim/app.js +++ b/egbim/app.js @@ -19,6 +19,7 @@ ON_HOLD: "보류" }; let authReady; + let resolvedAuthUser = null; function qs(selector, root) { return (root || document).querySelector(selector); } function qsa(selector, root) { return Array.prototype.slice.call((root || document).querySelectorAll(selector)); } @@ -163,8 +164,9 @@ function isPostOwner(post, user) { if (!post || !user) return false; - const postIds = [post.requesterId, post.requesterUuid].filter(Boolean); - const userIds = [user.requesterId, user.ssoSubject, user.userUuid].filter(Boolean); + const normalizeId = function (id) { return String(id || '').trim().toLowerCase(); }; + const postIds = [post.requesterId, post.requesterUuid].map(normalizeId).filter(Boolean); + const userIds = [user.requesterId, user.ssoSubject, user.userUuid].map(normalizeId).filter(Boolean); if (postIds.length && userIds.length) return postIds.some(function (id) { return userIds.indexOf(id) > -1; }); return Boolean(post.author && [user.name, user.loginId, user.email].filter(Boolean).indexOf(post.author) > -1); } @@ -326,6 +328,7 @@ } function getAuthUser() { + if (resolvedAuthUser) return resolvedAuthUser; const sessionUser = normalizeAuthUser({ loginId: sessionStorage.getItem('loginId') || '', userId: sessionStorage.getItem('descopeUserId') || '', @@ -348,17 +351,27 @@ async function loadAuthUser() { const localUser = getAuthUser(); - if (localUser && localUser.tenantId) return localUser; - if (!config.ssoSessionEndpoint) return localUser; + if (localUser && localUser.tenantId) { + resolvedAuthUser = localUser; + return localUser; + } + if (!config.ssoSessionEndpoint) { + resolvedAuthUser = localUser; + return localUser; + } try { const response = await fetch(config.ssoSessionEndpoint, { credentials: 'include', headers: { Accept: 'application/json' } }); if (!response.ok) throw new Error('SSO 세션 확인에 실패했습니다.'); const body = await response.json(); const remoteUser = normalizeAuthUser(body.user || body, body.claims || body.scope || {}); - if (remoteUser.loginId || remoteUser.ssoSubject) return remoteUser; + if (remoteUser.loginId || remoteUser.ssoSubject) { + resolvedAuthUser = remoteUser; + return remoteUser; + } } catch (error) { console.warn('[QA] SSO session bridge unavailable:', error.message); } + resolvedAuthUser = localUser; return localUser; }