add section admin permission
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user