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:
10
src/auth.js
10
src/auth.js
@@ -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),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user