Skip to content

Commit f69e000

Browse files
feat: 권한 목록 조회 API 연동 및 권한 옵션 로딩 로직 개선
1 parent 07e2f68 commit f69e000

3 files changed

Lines changed: 42 additions & 14 deletions

File tree

src/main/java/apu/saerok_admin/infra/role/AdminRoleClient.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package apu.saerok_admin.infra.role;
22

33
import apu.saerok_admin.infra.SaerokApiProps;
4+
import apu.saerok_admin.infra.role.dto.AdminPermissionListResponse;
45
import apu.saerok_admin.infra.role.dto.AdminMyRoleResponse;
56
import apu.saerok_admin.infra.role.dto.AdminRoleListResponse;
67
import apu.saerok_admin.infra.role.dto.AdminRoleUserListResponse;
@@ -42,6 +43,10 @@ public AdminRoleListResponse listRoles() {
4243
return get(AdminRoleListResponse.class);
4344
}
4445

46+
public AdminPermissionListResponse listPermissions() {
47+
return get(AdminPermissionListResponse.class, "permissions");
48+
}
49+
4550
public RoleDetailResponse createRole(CreateRoleRequest request) {
4651
return post(RoleDetailResponse.class, request);
4752
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package apu.saerok_admin.infra.role.dto;
2+
3+
import java.util.List;
4+
5+
public record AdminPermissionListResponse(
6+
List<PermissionSummaryResponse> permissions
7+
) {
8+
}

src/main/java/apu/saerok_admin/web/RoleManagementController.java

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import apu.saerok_admin.infra.role.AdminRoleClient;
44
import apu.saerok_admin.infra.role.dto.AdminMyRoleResponse;
5+
import apu.saerok_admin.infra.role.dto.AdminPermissionListResponse;
56
import apu.saerok_admin.infra.role.dto.AdminRoleListResponse;
67
import apu.saerok_admin.infra.role.dto.AdminRoleUserListResponse;
78
import apu.saerok_admin.infra.role.dto.AdminUserRoleResponse;
@@ -13,7 +14,6 @@
1314
import apu.saerok_admin.infra.role.dto.UpdateRolePermissionsRequest;
1415
import apu.saerok_admin.web.view.Breadcrumb;
1516
import apu.saerok_admin.web.view.CurrentAdminProfile;
16-
import apu.saerok_admin.web.view.role.PermissionCatalog;
1717
import apu.saerok_admin.web.view.role.PermissionOptionView;
1818
import apu.saerok_admin.web.view.role.PermissionView;
1919
import apu.saerok_admin.web.view.role.RoleDisplay;
@@ -104,7 +104,6 @@ public String index(@ModelAttribute("currentAdminProfile") CurrentAdminProfile c
104104
(left, right) -> left,
105105
LinkedHashMap::new
106106
));
107-
permissionOptions = buildPermissionOptions(roleTemplates);
108107
} catch (RestClientResponseException exception) {
109108
log.warn("Failed to load role templates. status={}, body={}",
110109
exception.getStatusCode(), exception.getResponseBodyAsString(), exception);
@@ -115,6 +114,32 @@ public String index(@ModelAttribute("currentAdminProfile") CurrentAdminProfile c
115114
}
116115
}
117116

117+
if (canManageRoles) {
118+
try {
119+
AdminPermissionListResponse response = adminRoleClient.listPermissions();
120+
permissionOptions = Optional.ofNullable(response)
121+
.map(AdminPermissionListResponse::permissions)
122+
.orElseGet(List::of)
123+
.stream()
124+
.map(permission -> new PermissionOptionView(permission.key(), permission.description()))
125+
.collect(Collectors.toMap(
126+
PermissionOptionView::key,
127+
option -> option,
128+
(left, right) -> left,
129+
LinkedHashMap::new
130+
))
131+
.values()
132+
.stream()
133+
.sorted(permissionOptionComparator())
134+
.toList();
135+
} catch (RestClientResponseException exception) {
136+
log.warn("Failed to load permissions. status={}, body={}",
137+
exception.getStatusCode(), exception.getResponseBodyAsString(), exception);
138+
} catch (RestClientException | IllegalStateException exception) {
139+
log.warn("Failed to load permissions.", exception);
140+
}
141+
}
142+
118143
String normalizedRoleCode = normalizeRoleCode(selectedRoleCode);
119144
RoleTemplateView selectedRoleTemplate = roleTemplatesByCode.get(normalizedRoleCode);
120145
if (selectedRoleTemplate == null && !roleTemplates.isEmpty()) {
@@ -566,20 +591,10 @@ private TeamMemberView toTeamMemberView(AdminUserRoleResponse response) {
566591
);
567592
}
568593

569-
private List<PermissionOptionView> buildPermissionOptions(List<RoleTemplateView> templates) {
570-
Map<String, PermissionOptionView> deduplicated = new LinkedHashMap<>();
571-
for (RoleTemplateView template : templates) {
572-
for (PermissionView permission : template.permissions()) {
573-
deduplicated.put(permission.key(), new PermissionOptionView(permission.key(), permission.description()));
574-
}
575-
}
576-
for (PermissionOptionView builtin : PermissionCatalog.builtinPermissions()) {
577-
deduplicated.putIfAbsent(builtin.key(), builtin);
578-
}
579-
Comparator<PermissionOptionView> comparator = Comparator
594+
private Comparator<PermissionOptionView> permissionOptionComparator() {
595+
return Comparator
580596
.comparing(PermissionOptionView::label, String.CASE_INSENSITIVE_ORDER)
581597
.thenComparing(PermissionOptionView::key, String.CASE_INSENSITIVE_ORDER);
582-
return deduplicated.values().stream().sorted(comparator).toList();
583598
}
584599

585600
private String normalizeTab(String requestedTab, boolean canViewTeamRoles, boolean canManageRoles) {

0 commit comments

Comments
 (0)