Skip to content

fix: ProtectedRoute에서 역할 확인 로직 개선 및 코드 정렬#45

Merged
koreahghg merged 2 commits intomainfrom
fix/main
Dec 29, 2025
Merged

fix: ProtectedRoute에서 역할 확인 로직 개선 및 코드 정렬#45
koreahghg merged 2 commits intomainfrom
fix/main

Conversation

@koreahghg
Copy link
Collaborator

💡 배경 및 개요

PR을 하게 된 문제상황, 배경 및 개요에 대해서 작성해주세요!

퍼블리싱의 경우 스크린샷/동영상도 추가해주면 좋아요!

Resolves: #{이슈번호}

📃 작업내용

PR에서 한 작업을 작성해주세요!

🙋‍♂️ 리뷰노트

구현 시에 고민이었던 점들 혹은 특정 부분에 대한 의도가 있었다면 PR 리뷰의 이해를 돕기 위해 서술해주세요!

또한 리뷰어에게 특정 부분에 대한 집중 혹은 코멘트 혹은 질문을 요청하는 경우에 작성하면 좋아요!

e.g. 작업을 끝내야할 시간이 얼마 없어 확장성보다는 동작을 위주로 만들었어요! 감안하고 리뷰해주세요!

✅ PR 체크리스트

템플릿 체크리스트 말고도 추가적으로 필요한 체크리스트는 추가해주세요!

  • 이 작업으로 인해 변경이 필요한 문서가 변경되었나요? (e.g. .env, 노션, README)
  • 이 작업을 하고나서 공유해야할 팀원들에게 공유되었나요? (e.g. "API 개발 완료됐어요", "환경값 추가되었어요")
  • 작업한 코드가 정상적으로 동작하나요?
  • Merge 대상 브랜치가 올바른가요?
  • PR과 관련 없는 작업이 있지는 않나요?

🎸 기타

@vercel
Copy link

vercel bot commented Dec 29, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
cklob-gami Ready Ready Preview, Comment Dec 29, 2025 5:48am

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @koreahghg, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 ProtectedRoute 컴포넌트의 역할 확인 메커니즘을 강화하여, 사용자 역할과 요구되는 역할 간의 비교를 더욱 유연하고 안정적으로 만듭니다. 역할 문자열을 표준화하는 과정을 도입하여 잠재적인 불일치 문제를 해결하고, 전반적인 접근 제어 로직의 견고성을 높이는 데 중점을 둡니다.

Highlights

  • 역할 확인 로직 개선: ProtectedRoute 컴포넌트 내에서 사용자 역할과 필요한 역할 간의 비교 로직을 개선했습니다. 이제 역할 문자열을 비교하기 전에 'ROLE_' 접두사를 제거하고 대문자로 변환하는 정규화 과정을 거칩니다.
  • 유연한 접근 제어: 역할 문자열 정규화를 통해 대소문자 구분 없이, 그리고 'ROLE_' 접두사 유무에 관계없이 역할을 올바르게 비교할 수 있게 되어 접근 제어의 유연성과 견고성이 향상되었습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이 PR은 ProtectedRoute 컴포넌트의 역할(role) 확인 로직을 개선합니다. 역할을 비교하기 전에 정규화하여 대소문자나 'ROLE_' 접두사에 관계없이 일관된 비교가 가능하도록 수정한 점이 좋습니다. 리뷰에서는 역할 조회 시 Set을 사용하여 성능을 최적화하는 방안을 제안했습니다. 이는 중첩된 배열 순회보다 효율적인 방법입니다.

Comment on lines +33 to +38
const normalize = (r: string) => r.replace(/^ROLE_/i, '').toUpperCase();

const normalizedUserRoles = userRoles.map((r) => normalize(r));
const normalizedRequired = required.map((r) => normalize(r));

const hasRole = normalizedRequired.some((req) =>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

역할을 확인할 때 Set을 사용하면 더 효율적입니다. userRolesSet으로 변환하면 각 requiredRole에 대한 확인이 평균 O(1) 시간 복잡도로 이루어집니다. 현재 구현은 O(M*N)의 복잡도를 가지지만, Set을 사용하면 O(M+N)으로 개선할 수 있습니다. 역할 목록이 작을 때는 큰 차이가 없겠지만, 더 나은 성능과 확장성을 위해 Set을 사용하는 것이 좋습니다.

    const normalizedUserRolesSet = new Set(userRoles.map((r) => normalize(r)));
    const hasRole = required.some((req) =>
      normalizedUserRolesSet.has(normalize(req))
    );

@koreahghg koreahghg merged commit b077ac4 into main Dec 29, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants