add section admin permission

This commit is contained in:
2026-05-07 15:24:25 +07:00
parent 91c85173e4
commit 200d070fa5
9 changed files with 364 additions and 1 deletions
@@ -5,16 +5,20 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import ru.soune.nocopy.adminpanel.dto.*;
import ru.soune.nocopy.adminpanel.entity.AdminSection;
import ru.soune.nocopy.adminpanel.entity.AdminUser;
import ru.soune.nocopy.adminpanel.exceptions.AdminUserNotFoundException;
import ru.soune.nocopy.adminpanel.exceptions.EmailAlreadyExistsException;
import ru.soune.nocopy.adminpanel.permission.AdminPermission;
import ru.soune.nocopy.adminpanel.service.AdminSectionPermissionService;
import ru.soune.nocopy.adminpanel.service.AdminUserService;
import ru.soune.nocopy.adminpanel.util.JwtUtil;
import ru.soune.nocopy.adminpanel.util.MessageCode;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
@@ -28,6 +32,8 @@ public class AdminUserHandler implements RequestHandler {
private final JwtUtil jwtUtil;
private final AdminSectionPermissionService permissionService;
@Override
public BaseResponse handle(BaseRequest request) throws Exception {
AdminUserRequest adminRequest = objectMapper.convertValue(request.getMessageBody(), AdminUserRequest.class);
@@ -42,6 +48,8 @@ public class AdminUserHandler implements RequestHandler {
case "set_super_admin" -> handleSetSuperAdmin(request, adminRequest);
case "toggle_active" -> handleToggleActive(request, adminRequest);
case "delete" -> handleDelete(request, adminRequest);
case "get_permissions" -> handleGetPermissions(request, adminRequest);
case "update_permissions" -> handleUpdatePermissions(request, adminRequest);
default -> handleInvalidAction(request, action);
};
}
@@ -243,7 +251,8 @@ public class AdminUserHandler implements RequestHandler {
.action(action)
.availableActions(Arrays.asList(
"login", "create", "get_all", "get_by_id",
"update", "set_super_admin", "toggle_active", "delete"))
"update", "set_super_admin", "toggle_active", "delete",
"get_permissions", "update_permissions"))
.build();
return BaseResponse.builder()
@@ -254,6 +263,105 @@ public class AdminUserHandler implements RequestHandler {
.build();
}
private BaseResponse handleGetPermissions(BaseRequest request, AdminUserRequest adminRequest) {
try {
Long userId = adminRequest.getAdminId();
AdminUser admin = adminUserService.findById(userId);
Map<AdminSection, Integer> sectionPermissions = permissionService.getAllPermissions(userId);
Map<String, Integer> permissionsMap = new HashMap<>();
sectionPermissions.forEach((section, value) ->
permissionsMap.put(section.name().toLowerCase(), value));
AdminUserResponse response = AdminUserResponse.builder()
.id(admin.getId())
.fullName(admin.getFullName())
.email(admin.getEmail())
.isActive(admin.getIsActive())
.isSuperAdmin(AdminPermission.isSuperAdmin(admin.getPermissions()))
.createdAt(admin.getCreatedAt().toString())
.permissions(permissionsMap)
.build();
return BaseResponse.builder()
.msgId(request.getMsgId())
.messageCode(MessageCode.SUCCESS.getCode())
.messageDesc(MessageCode.SUCCESS.getDescription())
.messageBody(response)
.build();
} catch (AdminUserNotFoundException e) {
return BaseResponse.builder()
.msgId(request.getMsgId())
.messageCode(MessageCode.ADMIN_NOT_FOUND.getCode())
.messageDesc(MessageCode.ADMIN_NOT_FOUND.getDescription())
.build();
}
}
private BaseResponse handleUpdatePermissions(BaseRequest request, AdminUserRequest adminRequest) {
try {
Long userId = adminRequest.getAdminId();
Map<String, Integer> permissionsMap = adminRequest.getPermissions();
if (permissionsMap == null || permissionsMap.isEmpty()) {
return BaseResponse.builder()
.msgId(request.getMsgId())
.messageCode(MessageCode.INVALID_ACTION.getCode())
.messageDesc("Permissions map is required")
.build();
}
Map<AdminSection, Integer> permissions = new HashMap<>();
for (Map.Entry<String, Integer> entry : permissionsMap.entrySet()) {
try {
AdminSection section = AdminSection.valueOf(entry.getKey().toUpperCase());
permissions.put(section, entry.getValue());
} catch (IllegalArgumentException e) {
return BaseResponse.builder()
.msgId(request.getMsgId())
.messageCode(MessageCode.INVALID_ACTION.getCode())
.messageDesc("Invalid section: " + entry.getKey() +
". Valid sections: " + Arrays.toString(AdminSection.values()))
.build();
}
}
permissionService.setAllPermissions(userId, permissions);
AdminUser admin = adminUserService.findById(userId);
Map<AdminSection, Integer> updatedPermissions = permissionService.getAllPermissions(userId);
Map<String, Integer> updatedPermissionsMap = new HashMap<>();
updatedPermissions.forEach((section, value) ->
updatedPermissionsMap.put(section.name().toLowerCase(), value));
AdminUserResponse response = AdminUserResponse.builder()
.id(admin.getId())
.fullName(admin.getFullName())
.email(admin.getEmail())
.isActive(admin.getIsActive())
.isSuperAdmin(AdminPermission.isSuperAdmin(admin.getPermissions()))
.createdAt(admin.getCreatedAt().toString())
.permissions(updatedPermissionsMap)
.build();
return BaseResponse.builder()
.msgId(request.getMsgId())
.messageCode(MessageCode.SUCCESS.getCode())
.messageDesc("Permissions updated successfully")
.messageBody(response)
.build();
} catch (AdminUserNotFoundException e) {
return BaseResponse.builder()
.msgId(request.getMsgId())
.messageCode(MessageCode.ADMIN_NOT_FOUND.getCode())
.messageDesc(MessageCode.ADMIN_NOT_FOUND.getDescription())
.build();
}
}
private AdminUserResponse convertToResponse(AdminUser admin) {
return AdminUserResponse.builder()
.id(admin.getId())