From 3280be8bd482a0e14c1e27e1bad531f1786b2919 Mon Sep 17 00:00:00 2001
From: hjjeong
Date: Thu, 7 May 2026 16:51:16 +0900
Subject: [PATCH] =?UTF-8?q?fix(rolesList):=20cross-tenant=20row=20?=
=?UTF-8?q?=EC=8B=9D=EB=B3=84=20+=20=EB=A9=94=EB=89=B4=20=ED=8A=B8?=
=?UTF-8?q?=EB=A6=AC=20=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EB=B3=B4=EA=B0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
cross-tenant fan-out 결과에서 회사 A·B 의 동일 objid 가 합본에 들어와
React key 중복 경고 발생 + isSelected 가 회사 구분 못 하던 문제.
- li key: role.objid → \`\${company_code}-\${objid}\` 조합으로 unique
- isSelected 비교: objid + company_code 둘 다 매칭
- selectedRole 유효성 체크(useEffect)에도 company_code 매칭 추가
추가:
- 메뉴 전체 트리구조에 자체 스크롤 (maxHeight: calc(100vh - 32rem))
- thead sticky top-0 + bg-muted (투명도 제거) → 스크롤 시 헤더 가려짐 해소
SUPER_ADMIN cross-tenant 정책 변경 없음 (모든 회사 합본 표시 유지),
React 식별만 정확해지는 fix.
Co-Authored-By: Claude Opus 4.7 (1M context)
---
.../app/(main)/admin/userMng/rolesList/page.tsx | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/frontend/app/(main)/admin/userMng/rolesList/page.tsx b/frontend/app/(main)/admin/userMng/rolesList/page.tsx
index 74c29633..07748cda 100644
--- a/frontend/app/(main)/admin/userMng/rolesList/page.tsx
+++ b/frontend/app/(main)/admin/userMng/rolesList/page.tsx
@@ -180,7 +180,11 @@ export default function RolesPage() {
// 선택 유효성
useEffect(() => {
if (!selectedRole) return;
- if (!roleGroups.find((r) => r.objid === selectedRole.objid)) {
+ if (
+ !roleGroups.find(
+ (r) => r.objid === selectedRole.objid && r.company_code === selectedRole.company_code,
+ )
+ ) {
setSelectedRole(null);
}
}, [roleGroups, selectedRole]);
@@ -665,10 +669,12 @@ export default function RolesPage() {
) : (
{filteredRoleGroups.map((role) => {
- const isSelected = selectedRole?.objid === role.objid;
+ const isSelected =
+ selectedRole?.objid === role.objid &&
+ selectedRole?.company_code === role.company_code;
return (
- setSelectedRole(role)}
className={cn(
"group cursor-pointer p-2.5 transition-colors",
@@ -922,9 +928,9 @@ export default function RolesPage() {
등록된 메뉴가 없습니다
) : (
-