UserAuthLookup.java
package org.darkroomlibrary.infrastructure.security;
import org.darkroomlibrary.domain.model.User;
import org.darkroomlibrary.domain.type.AccountStatus;
import org.darkroomlibrary.mapper.UserMapper;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
import jakarta.annotation.Resource;
import java.util.Optional;
/**
* Reads authorization state directly from MySQL so role and account changes take
* effect on the next request across every application instance.
*/
@Component
public class UserAuthLookup {
@Resource
private UserMapper userMapper;
public Optional<AuthUser> getActiveUser(Integer userId) {
if (userId == null) {
return Optional.empty();
}
User user = userMapper.getById(userId);
if (user == null) {
return Optional.empty();
}
return Optional.of(new AuthUser(
user.getId(),
user.getUserName(),
user.getUserRole(),
user.getAuthVersion(),
isDisabled(user)
));
}
private boolean isDisabled(User user) {
return Boolean.TRUE.equals(user.getIsLogin())
|| AccountStatus.FROZEN.code().equals(user.getAccountStatus())
|| AccountStatus.CANCELLED.code().equals(user.getAccountStatus());
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class AuthUser {
private Integer id;
private String userName;
private Integer userRole;
private Integer authVersion;
private Boolean disabled;
}
}