diff --git a/frontend/src/pages/ssh/SshHostsPage/components/SshHostsTable.tsx b/frontend/src/pages/ssh/SshHostsPage/components/SshHostsTable.tsx index d69328b82..20d907038 100644 --- a/frontend/src/pages/ssh/SshHostsPage/components/SshHostsTable.tsx +++ b/frontend/src/pages/ssh/SshHostsPage/components/SshHostsTable.tsx @@ -94,40 +94,31 @@ export const SshHostsTable = ({ handlePopUpOpen }: Props) => { Object.entries( host.loginMappings.reduce( (acc, mapping) => { - const { loginUser, source } = mapping; - const existing = acc[loginUser]; - - if (!existing) { - acc[loginUser] = mapping; - } else if ( - existing.source === LoginMappingSource.HOST_GROUP && - source === LoginMappingSource.HOST - ) { - // Prefer HOST over HOST_GROUP - acc[loginUser] = mapping; - } - + const key = `${mapping.loginUser}|${mapping.source}|${mapping.allowedPrincipals.usernames.sort().join(",")}`; + acc[key] = mapping; return acc; }, {} as Record ) - ).map(([loginUser, { allowedPrincipals, source }]) => ( -
-
- {loginUser} - {source === LoginMappingSource.HOST_GROUP && ( - - (inherited from host group) - - )} -
- {allowedPrincipals.usernames.map((username) => ( -
- └─ {username} + ) + .sort(([a], [b]) => a.localeCompare(b)) + .map(([key, { loginUser, allowedPrincipals, source }]) => ( +
+
+ {loginUser} + {source === LoginMappingSource.HOST_GROUP && ( + + (inherited from host group) + + )}
- ))} -
- )) + {allowedPrincipals.usernames.map((username) => ( +
+ └─ {username} +
+ ))} +
+ )) )}