feat(auth): Keycloak role 기반 관리자 판별과 도구 카탈로그 개편

- auth.js: realm/client role 추출 → roles·isAdmin 세션 저장
- config.js: ADMIN_ROLE + 도구 URL 8종 환경변수화
- sites.js: 개발4 + 인프라4(adminOnly) 재구성, toolsForUser(isAdmin)
- .project-env.example: ADMIN_ROLE·도구 URL 항목 추가

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyemin Lee
2026-06-29 17:12:03 +09:00
parent 87289502c8
commit 8be3a532cb
4 changed files with 62 additions and 22 deletions

View File

@@ -42,10 +42,20 @@ export async function handleCallback(req) {
nonce,
});
const claims = tokenSet.claims();
// Keycloak realm 역할: realm_access.roles. (클라이언트 역할은 resource_access[client].roles)
const realmRoles = (claims.realm_access && claims.realm_access.roles) || [];
const clientRoles =
(claims.resource_access &&
claims.resource_access[config.oidc.clientId] &&
claims.resource_access[config.oidc.clientId].roles) ||
[];
const roles = [...new Set([...realmRoles, ...clientRoles])];
return {
sabun: claims.preferred_username, // 사번
name: claims.name || claims.given_name || claims.preferred_username,
email: claims.email,
roles,
isAdmin: roles.includes(config.adminRole),
};
}