+
{tenantList?.items.map((tenant) => (
))}
@@ -62,8 +62,8 @@ function TenantGroupCard({ tenant }: { tenant: TenantSummary }) {
});
return (
-
-
+
+
@@ -83,62 +83,66 @@ function TenantGroupCard({ tenant }: { tenant: TenantSummary }) {
-
-
-
-
- 그룹명
- 설명
- 멤버 수
- 작업
-
-
-
- {isLoading ? (
-
-
- Loading...
-
-
- ) : groups?.length === 0 ? (
-
-
- 등록된 유저 그룹이 없습니다.
-
-
- ) : (
- groups?.map((group) => (
-
-
-
-
-
- {group.name}
-
-
-
- {group.description || "-"}
- {group.members?.length || 0} 명
-
-
-
+
+
+
+
+
+
+ 그룹명
+ 설명
+ 멤버 수
+ 작업
- ))
- )}
-
-
+
+
+ {isLoading ? (
+
+
+ Loading...
+
+
+ ) : groups?.length === 0 ? (
+
+
+ 등록된 유저 그룹이 없습니다.
+
+
+ ) : (
+ groups?.map((group) => (
+
+
+
+
+
+ {group.name}
+
+
+
+ {group.description || "-"}
+ {group.members?.length || 0} 명
+
+
+
+
+ ))
+ )}
+
+
+
+
);
diff --git a/adminfront/src/features/user-groups/routes/TenantUserGroupsTab.tsx b/adminfront/src/features/user-groups/routes/TenantUserGroupsTab.tsx
index c56f8702..ad4ffdc7 100644
--- a/adminfront/src/features/user-groups/routes/TenantUserGroupsTab.tsx
+++ b/adminfront/src/features/user-groups/routes/TenantUserGroupsTab.tsx
@@ -929,9 +929,9 @@ function TenantUserGroupsTab() {
const BaseIcon = getTenantIcon(currentBase.type);
return (
-
-
-
+
+
+
@@ -1078,7 +1078,7 @@ function TenantUserGroupsTab() {
-
+
)}
-
-
-
-
-
- {t("ui.admin.tenants.table.name", "NAME")}
-
-
- {t("ui.admin.tenants.table.slug", "SLUG")}
-
-
- {t("ui.admin.tenants.table.members", "MEMBERS")}
-
-
- {t("ui.admin.tenants.table.status", "STATUS")}
-
-
- {t("ui.admin.tenants.table.actions", "ACTIONS")}
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ {t("ui.admin.tenants.table.name", "NAME")}
+
+
+ {t("ui.admin.tenants.table.slug", "SLUG")}
+
+
+ {t("ui.admin.tenants.table.members", "MEMBERS")}
+
+
+ {t("ui.admin.tenants.table.status", "STATUS")}
+
+
+ {t("ui.admin.tenants.table.actions", "ACTIONS")}
+
+
+
+
+
+
+
+
+
diff --git a/adminfront/src/features/user-groups/routes/UserGroupDetailPage.tsx b/adminfront/src/features/user-groups/routes/UserGroupDetailPage.tsx
index 98b9f9c7..860a8142 100644
--- a/adminfront/src/features/user-groups/routes/UserGroupDetailPage.tsx
+++ b/adminfront/src/features/user-groups/routes/UserGroupDetailPage.tsx
@@ -211,8 +211,8 @@ export function UserGroupDetailPage() {
);
return (
-
-
+
+
-
+
{/* Members Management */}
-
-
+
+
{t("ui.admin.groups.detail.members_title", "구성원 관리")}
@@ -347,88 +347,90 @@ export function UserGroupDetailPage() {
-
-
-
-
-
-
- {t("ui.admin.users.list.table.name_email", "사용자")}
-
-
- {t("ui.admin.groups.table.actions", "액션")}
-
-
-
-
- {!currentGroup.members ||
- currentGroup.members.length === 0 ? (
+
+
+
+
+
-
- {t(
- "msg.admin.groups.members.empty",
- "구성원이 없습니다.",
- )}
-
+
+ {t("ui.admin.users.list.table.name_email", "사용자")}
+
+
+ {t("ui.admin.groups.table.actions", "액션")}
+
- ) : (
- currentGroup.members.map((member) => (
-
-
-
-
- {member.name.charAt(0)}
-
-
-
- {member.name}
-
-
- {member.email}
-
-
-
-
-
-
+
+
+ {!currentGroup.members ||
+ currentGroup.members.length === 0 ? (
+
+
+ {t(
+ "msg.admin.groups.members.empty",
+ "구성원이 없습니다.",
+ )}
- ))
- )}
-
-
+ ) : (
+ currentGroup.members.map((member) => (
+
+
+
+
+ {member.name.charAt(0)}
+
+
+
+ {member.name}
+
+
+ {member.email}
+
+
+
+
+
+
+
+
+ ))
+ )}
+
+
+
{/* Roles/Permissions Management (Keto Based) */}
-
-
+
+
{t("ui.admin.groups.detail.permissions_title", "권한 관리")}
@@ -530,86 +532,88 @@ export function UserGroupDetailPage() {
-
-
-
-
-
-
- {t("ui.admin.users.detail.form.tenant", "대상 테넌트")}
-
-
- {t("ui.admin.users.detail.form.role", "역할")}
-
-
- {t("ui.admin.groups.table.actions", "액션")}
-
-
-
-
- {isRolesLoading ? (
+
+
+
+
+
-
-
-
+
+ {t("ui.admin.users.detail.form.tenant", "대상 테넌트")}
+
+
+ {t("ui.admin.users.detail.form.role", "역할")}
+
+
+ {t("ui.admin.groups.table.actions", "액션")}
+
- ) : !groupRoles || groupRoles.length === 0 ? (
-
-
- {t(
- "msg.admin.groups.roles.empty",
- "할당된 역할이 없습니다.",
- )}
-
-
- ) : (
- groupRoles.map((role, idx) => (
-
-
-
- {role.tenantName || role.tenantId}
-
-
-
-
- {role.relation}
-
-
-
-
+
+
+ {isRolesLoading ? (
+
+
+
- ))
- )}
-
-
+ ) : !groupRoles || groupRoles.length === 0 ? (
+
+
+ {t(
+ "msg.admin.groups.roles.empty",
+ "할당된 역할이 없습니다.",
+ )}
+
+
+ ) : (
+ groupRoles.map((role, idx) => (
+
+
+
+ {role.tenantName || role.tenantId}
+
+
+
+
+ {role.relation}
+
+
+
+
+
+
+ ))
+ )}
+
+
+