[api] userType, userRole 추가

This commit is contained in:
2026-05-12 17:40:07 +09:00
parent c7b8478ad0
commit 4368eccc82
23 changed files with 83 additions and 19 deletions
@@ -102,7 +102,8 @@ public class AdminAuthController {
result.put("userId", admin.getId()); result.put("userId", admin.getId());
result.put("userIdx", admin.getUserIdx()); result.put("userIdx", admin.getUserIdx());
result.put("userTokenIdx", userTokenIdx); result.put("userTokenIdx", userTokenIdx);
result.put("userRole", "ADMIN"); result.put("userRole", admin.getUserRole());
result.put("userType", admin.getUserType());
return ApiResponse.entity(result, ApiResponseCode.CODE_200); return ApiResponse.entity(result, ApiResponseCode.CODE_200);
} }
@@ -10,6 +10,8 @@ public class AdminLoginVo {
private boolean isLogin; private boolean isLogin;
private Integer userIdx; private Integer userIdx;
private String id; private String id;
private String userRole;
private String userType;
@JsonIgnore @JsonIgnore
private String password; private String password;
@@ -10,6 +10,7 @@ public class AdminUserDto {
private Integer userIdx; private Integer userIdx;
private String id; private String id;
private String userRole; private String userRole;
private String userType;
@JsonIgnore @JsonIgnore
private String newPassword; private String newPassword;
@@ -31,15 +31,31 @@ public class AdminUserSignupForm {
) )
private String password; private String password;
@NotBlank(message = "사용자 권한(관리자{A:관리자}")
@Pattern(
regexp = "^A$",
message = "사용자 권한(관리자{A:관리자})"
)
@Schema(
description = "사용자 권한(관리자{A:관리자})",
example = "A"
)
private String userRole;
@NotBlank(message = "사용자 구분(A:관리자)") @NotBlank(message = "사용자 구분(A:관리자)")
@Pattern(regexp = "^A$", message = "관리자 사용자 구분은 A만 가능합니다.") @Pattern(regexp = "^A$", message = "관리자 사용자 구분은 A만 가능합니다.")
private String userRole; @Schema(
description = "사용자 타입(A:관리자)",
example = "A"
)
private String userType;
public AdminUserDto toAdminUserDto() { public AdminUserDto toAdminUserDto() {
AdminUserDto adminUserDto = new AdminUserDto(); AdminUserDto adminUserDto = new AdminUserDto();
adminUserDto.setId(id.trim()); adminUserDto.setId(id.trim());
adminUserDto.setPassword(password); adminUserDto.setPassword(password);
adminUserDto.setUserRole(userRole); adminUserDto.setUserRole(userRole);
adminUserDto.setUserType(userType);
return adminUserDto; return adminUserDto;
} }
} }
@@ -28,6 +28,7 @@ public class AdminUserService {
userDto.setId(adminUserDto.getId()); userDto.setId(adminUserDto.getId());
userDto.setPassword(adminUserDto.getPassword()); userDto.setPassword(adminUserDto.getPassword());
userDto.setUserRole(adminUserDto.getUserRole()); userDto.setUserRole(adminUserDto.getUserRole());
userDto.setUserType(adminUserDto.getUserType());
UserVo userVo = userService.insertUser(userDto); UserVo userVo = userService.insertUser(userDto);
@@ -35,6 +36,8 @@ public class AdminUserService {
result.setResultCode(userVo.getResultCode()); result.setResultCode(userVo.getResultCode());
result.setUserIdx(userVo.getUserIdx()); result.setUserIdx(userVo.getUserIdx());
result.setId(userVo.getId()); result.setId(userVo.getId());
result.setUserRole(userVo.getUserRole());
result.setUserType(userVo.getUserType());
return result; return result;
} }
@@ -10,6 +10,7 @@ public class AdminUserVo {
private Integer userIdx; private Integer userIdx;
private String id; private String id;
private String userRole; private String userRole;
private String userType;
@JsonIgnore @JsonIgnore
private String newPassword; private String newPassword;
@@ -102,6 +102,7 @@ public class AuthController {
result.put("userIdx", ssoSession.getUserIdx()); result.put("userIdx", ssoSession.getUserIdx());
result.put("userId", ssoSession.getUserId()); result.put("userId", ssoSession.getUserId());
result.put("userRole", ssoSession.getUserRole()); result.put("userRole", ssoSession.getUserRole());
result.put("userType", ssoSession.getUserType());
return ApiResponse.entity(result, ApiResponseCode.CODE_2001, "토큰"); return ApiResponse.entity(result, ApiResponseCode.CODE_2001, "토큰");
} }
@@ -73,7 +73,8 @@ public class SsoController {
result.setLoginIn(true); result.setLoginIn(true);
result.setId(ssoLoginDto.getUserId()); result.setId(ssoLoginDto.getUserId());
result.setUserIdx(ssoLoginDto.getUserIdx()); result.setUserIdx(ssoLoginDto.getUserIdx());
result.setRole(ssoLoginDto.getUserRole()); result.setUserRole(ssoLoginDto.getUserRole());
result.setUserType(ssoLoginDto.getUserType());
return ApiResponse.entity(result, ApiResponseCode.CODE_2001, "SSO 로그인"); return ApiResponse.entity(result, ApiResponseCode.CODE_2001, "SSO 로그인");
} }
@@ -112,6 +113,7 @@ public class SsoController {
result.put("userIdx", ssoSession.getUserIdx()); result.put("userIdx", ssoSession.getUserIdx());
result.put("userTokenIdx", ssoSession.getUserTokenIdx()); result.put("userTokenIdx", ssoSession.getUserTokenIdx());
result.put("userRole", ssoSession.getUserRole()); result.put("userRole", ssoSession.getUserRole());
result.put("userType", ssoSession.getUserType());
return ApiResponse.entity(result, ApiResponseCode.CODE_200); return ApiResponse.entity(result, ApiResponseCode.CODE_200);
} }
@@ -22,6 +22,8 @@ public class LoginDto {
@JsonIgnore @JsonIgnore
private String userRole; private String userRole;
@JsonIgnore @JsonIgnore
private String userType;
@JsonIgnore
private String userApiKey; private String userApiKey;
@JsonIgnore @JsonIgnore
private Integer userTokenIdx; private Integer userTokenIdx;
@@ -15,4 +15,5 @@ public class SsoExchangeDto {
private Integer userTokenIdx; private Integer userTokenIdx;
private String userId; private String userId;
private String userRole; private String userRole;
private String userType;
} }
@@ -9,5 +9,6 @@ public class SsoLoginCheckDto {
private boolean loginIn; private boolean loginIn;
private String id; private String id;
private Integer userIdx; private Integer userIdx;
private String role; private String userRole;
private String userType;
} }
@@ -15,6 +15,7 @@ public class SsoLoginDto {
private Integer userTokenIdx; private Integer userTokenIdx;
private String userId; private String userId;
private String userRole; private String userRole;
private String userType;
public LoginDto toLoginDto() { public LoginDto toLoginDto() {
LoginDto loginDto = new LoginDto(); LoginDto loginDto = new LoginDto();
@@ -45,6 +45,7 @@ public class AuthService {
loginDto.setUserTokenIdx(loginTokenVo.getUserTokenIdx()); loginDto.setUserTokenIdx(loginTokenVo.getUserTokenIdx());
loginDto.setUserRole(loginTokenVo.getUserRole()); loginDto.setUserRole(loginTokenVo.getUserRole());
loginDto.setUserType(loginTokenVo.getUserType());
Instant now = Instant.now(); Instant now = Instant.now();
Instant expiresAt = now.plusSeconds(jwtProperties.getRefreshTokenValiditySeconds()); Instant expiresAt = now.plusSeconds(jwtProperties.getRefreshTokenValiditySeconds());
@@ -55,6 +55,7 @@ public class SsoService {
redisTemplate.opsForHash().put(sessionKey, "userTokenIdx", String.valueOf(loginDto.getUserTokenIdx())); redisTemplate.opsForHash().put(sessionKey, "userTokenIdx", String.valueOf(loginDto.getUserTokenIdx()));
redisTemplate.opsForHash().put(sessionKey, "userId", loginDto.getId()); redisTemplate.opsForHash().put(sessionKey, "userId", loginDto.getId());
redisTemplate.opsForHash().put(sessionKey, "userRole", loginDto.getUserRole()); redisTemplate.opsForHash().put(sessionKey, "userRole", loginDto.getUserRole());
redisTemplate.opsForHash().put(sessionKey, "userType", loginDto.getUserType());
redisTemplate.expire(sessionKey, ssoSessionTtl); redisTemplate.expire(sessionKey, ssoSessionTtl);
redisTemplate.opsForValue().set(latestSessionKey, ssoSessionId, ssoSessionTtl); redisTemplate.opsForValue().set(latestSessionKey, ssoSessionId, ssoSessionTtl);
@@ -63,6 +64,7 @@ public class SsoService {
result.setUserId(loginDto.getId()); result.setUserId(loginDto.getId());
result.setUserIdx(loginDto.getUserIdx()); result.setUserIdx(loginDto.getUserIdx());
result.setUserRole(loginDto.getUserRole()); result.setUserRole(loginDto.getUserRole());
result.setUserType(loginDto.getUserType());
result.setResultCode(200); result.setResultCode(200);
return result; return result;
@@ -90,6 +92,7 @@ public class SsoService {
String userId = (String) redisTemplate.opsForHash().get(sessionKey, "userId"); String userId = (String) redisTemplate.opsForHash().get(sessionKey, "userId");
String userTokenIdx = (String) redisTemplate.opsForHash().get(sessionKey, "userTokenIdx"); String userTokenIdx = (String) redisTemplate.opsForHash().get(sessionKey, "userTokenIdx");
String userRole = (String) redisTemplate.opsForHash().get(sessionKey, "userRole"); String userRole = (String) redisTemplate.opsForHash().get(sessionKey, "userRole");
String userType = (String) redisTemplate.opsForHash().get(sessionKey, "userType");
SsoExchangeDto result = new SsoExchangeDto(); SsoExchangeDto result = new SsoExchangeDto();
result.setSsoSessionId(ssoSessionId); result.setSsoSessionId(ssoSessionId);
@@ -97,6 +100,7 @@ public class SsoService {
result.setUserIdx(userIdx == null ? null : Integer.parseInt(userIdx)); result.setUserIdx(userIdx == null ? null : Integer.parseInt(userIdx));
result.setUserTokenIdx(userTokenIdx == null ? null : Integer.parseInt(userTokenIdx)); result.setUserTokenIdx(userTokenIdx == null ? null : Integer.parseInt(userTokenIdx));
result.setUserRole(userRole); result.setUserRole(userRole);
result.setUserType(userType);
return result; return result;
} }
@@ -168,6 +172,7 @@ public class SsoService {
String userIdx = (String) redisTemplate.opsForHash().get(sessionKey, "userIdx"); String userIdx = (String) redisTemplate.opsForHash().get(sessionKey, "userIdx");
String userTokenIdx = (String) redisTemplate.opsForHash().get(sessionKey, "userTokenIdx"); String userTokenIdx = (String) redisTemplate.opsForHash().get(sessionKey, "userTokenIdx");
String userRole = (String) redisTemplate.opsForHash().get(sessionKey, "userRole"); String userRole = (String) redisTemplate.opsForHash().get(sessionKey, "userRole");
String userType = (String) redisTemplate.opsForHash().get(sessionKey, "userType");
String latestSsoSessionId = redisTemplate.opsForValue().get("alist:sso:userIdx:" + userIdx); String latestSsoSessionId = redisTemplate.opsForValue().get("alist:sso:userIdx:" + userIdx);
if (!ssoSessionId.equals(latestSsoSessionId)) { if (!ssoSessionId.equals(latestSsoSessionId)) {
@@ -182,6 +187,7 @@ public class SsoService {
result.setUserIdx(Integer.parseInt(userIdx)); result.setUserIdx(Integer.parseInt(userIdx));
result.setUserTokenIdx(Integer.parseInt(userTokenIdx)); result.setUserTokenIdx(Integer.parseInt(userTokenIdx));
result.setUserRole(userRole); result.setUserRole(userRole);
result.setUserType(userType);
result.setSsoSessionId(ssoSessionId); result.setSsoSessionId(ssoSessionId);
return result; return result;
} }
@@ -7,5 +7,6 @@ public class LoginTokenVo {
private Integer userTokenIdx; private Integer userTokenIdx;
private String userApiKey; private String userApiKey;
private String userRole; private String userRole;
private String userType;
private String refreshToken; private String refreshToken;
} }
@@ -10,6 +10,7 @@ public class UserDto {
private Integer userIdx; private Integer userIdx;
private String id; private String id;
private String userRole; private String userRole;
private String userType;
@JsonIgnore @JsonIgnore
private String newPassword; private String newPassword;
@@ -10,5 +10,6 @@ public class UserTokenDto {
private Integer userIdx; private Integer userIdx;
private String userApiKey; private String userApiKey;
private String userRole; private String userRole;
private String userType;
private int resultCode; private int resultCode;
} }
@@ -31,22 +31,34 @@ public class UserSignupForm {
) )
private String password; private String password;
@NotBlank(message = "사용자 구분(T:교사, S1: 학생, S2: 수강생)") @NotBlank(message = "사용자 권한(교사{CCM: 복합 캠퍼스 마스터, SCM:단일 캠퍼스 마스터, I: 교사}, 학생{R:정회원, E:수강생}")
@Pattern( @Pattern(
regexp = "^(S1|S2|T)$", regexp = "^(CCM|SCM|I|R|E)$",
message = "사용자 구분은 S1(학생), S2(수강생), T(교사)만 가능합니다." message = "사용자 권한(교사{CCM: 복합 캠퍼스 마스터, SCM:단일 캠퍼스 마스터, I: 교사}, 학생{R:정회원, E:수강생})"
) )
@Schema( @Schema(
description = "사용자 구분(T:교사, S1: 학생, S2: 수강생)", description = "사용자 권한(사용자 권한(교사{CCM: 복합 캠퍼스 마스터, SCM:단일 캠퍼스 마스터, I: 교사}, 학생{R:정회원, E:수강생})",
example = "T" example = "I"
) )
private String userRole; private String userRole;
@NotBlank(message = "사용자 타입(T:교사, S: 학생)")
@Pattern(
regexp = "^(S|T)$",
message = "사용자 타입 S(학생), T(교사)만 가능합니다."
)
@Schema(
description = "사용자 타입(T:교사, S: 학생)",
example = "T"
)
private String userType;
public UserDto toUserDto() { public UserDto toUserDto() {
UserDto userDto = new UserDto(); UserDto userDto = new UserDto();
userDto.setId(id.trim()); userDto.setId(id.trim());
userDto.setPassword(password); userDto.setPassword(password);
userDto.setUserRole(userRole); userDto.setUserRole(userRole);
userDto.setUserType(userType);
return userDto; return userDto;
} }
} }
@@ -41,6 +41,7 @@ public class UserService {
UserVo result = new UserVo(); UserVo result = new UserVo();
result.setId(userDto.getId()); result.setId(userDto.getId());
result.setUserRole(userDto.getUserRole()); result.setUserRole(userDto.getUserRole());
result.setUserType(userDto.getUserType());
// 중복체크 // 중복체크
if (userMapper.selectDuplicateUserCount(userDto) > 0) { if (userMapper.selectDuplicateUserCount(userDto) > 0) {
@@ -59,6 +60,7 @@ public class UserService {
UserTokenDto userTokenDto = new UserTokenDto(); UserTokenDto userTokenDto = new UserTokenDto();
userTokenDto.setUserIdx(userDto.getUserIdx()); userTokenDto.setUserIdx(userDto.getUserIdx());
userTokenDto.setUserRole(userDto.getUserRole()); userTokenDto.setUserRole(userDto.getUserRole());
userTokenDto.setUserType(userDto.getUserType());
result.setUserIdx(userDto.getUserIdx()); result.setUserIdx(userDto.getUserIdx());
@@ -10,6 +10,7 @@ public class UserVo {
private Integer userIdx; private Integer userIdx;
private String id; private String id;
private String userRole; private String userRole;
private String userType;
@JsonIgnore @JsonIgnore
private String newPassword; private String newPassword;
@@ -9,8 +9,8 @@
</insert> </insert>
<insert id="insertUserTokenSignup" useGeneratedKeys="true" keyProperty="userTokenIdx"> <insert id="insertUserTokenSignup" useGeneratedKeys="true" keyProperty="userTokenIdx">
/*UserMapper.insertUserTokenSignup*/ /*UserMapper.insertUserTokenSignup*/
insert into ALISTLMS.test_user_token (user_idx, user_api_key, user_role, created_at, updated_at) insert into ALISTLMS.test_user_token (user_idx, user_api_key, user_role, user_type, created_at, updated_at)
value (#{userIdx}, #{userApiKey}, #{userRole}, now(), now()) value (#{userIdx}, #{userApiKey}, #{userRole}, #{userType}, now(), now())
</insert> </insert>
<select id="selectDuplicateUserCount" resultType="int"> <select id="selectDuplicateUserCount" resultType="int">
@@ -9,7 +9,7 @@
, expires_at = #{expiresAt} , expires_at = #{expiresAt}
, updated_at = now() , updated_at = now()
WHERE user_token_idx = #{userTokenIdx} WHERE user_token_idx = #{userTokenIdx}
AND user_role IN ('A') AND user_type IN ('A')
</update> </update>
<update id="updateAdminLastLoginAt"> <update id="updateAdminLastLoginAt">
/*AdminLoginMapper.updateAdminLastLoginAt*/ /*AdminLoginMapper.updateAdminLastLoginAt*/
@@ -25,7 +25,7 @@
, expires_at = null , expires_at = null
, updated_at = now() , updated_at = now()
WHERE user_token_idx = #{userTokenIdx} WHERE user_token_idx = #{userTokenIdx}
AND user_role IN ('A') AND user_type IN ('A')
</update> </update>
<select id="selectAdminLoginById" resultType="com.alist.api.modules.admin.auth.vo.AdminLoginVo"> <select id="selectAdminLoginById" resultType="com.alist.api.modules.admin.auth.vo.AdminLoginVo">
/*AdminLoginMapper.selectAdminLoginById*/ /*AdminLoginMapper.selectAdminLoginById*/
@@ -33,11 +33,13 @@
, ATU.id , ATU.id
, ATU.password , ATU.password
, ATUT.user_token_idx , ATUT.user_token_idx
, ATUT.user_role
, ATUT.user_type
FROM ALISTLMS.test_user ATU FROM ALISTLMS.test_user ATU
INNER JOIN ALISTLMS.test_user_token ATUT ON ATUT.user_idx = ATU.user_idx INNER JOIN ALISTLMS.test_user_token ATUT ON ATUT.user_idx = ATU.user_idx
WHERE ATU.id = #{id} WHERE ATU.id = #{id}
AND ATU.del_yn = 1 AND ATU.del_yn = 1
AND ATUT.user_role IN ('A') AND ATUT.user_type IN ('A')
LIMIT 1 LIMIT 1
</select> </select>
<select id="selectAdminTokenByUserTokenIdx" resultType="com.alist.api.modules.admin.auth.vo.AdminLoginVo"> <select id="selectAdminTokenByUserTokenIdx" resultType="com.alist.api.modules.admin.auth.vo.AdminLoginVo">
@@ -46,10 +48,12 @@
, ATU.id , ATU.id
, ATUT.user_token_idx , ATUT.user_token_idx
, ATUT.refresh_token , ATUT.refresh_token
, ATUT.user_role
, ATUT.user_type
FROM ALISTLMS.test_user_token ATUT FROM ALISTLMS.test_user_token ATUT
INNER JOIN ALISTLMS.test_user ATU ON ATU.user_idx = ATUT.user_idx INNER JOIN ALISTLMS.test_user ATU ON ATU.user_idx = ATUT.user_idx
WHERE ATUT.user_token_idx = #{userTokenIdx} WHERE ATUT.user_token_idx = #{userTokenIdx}
AND ATUT.user_role IN ('A') AND ATUT.user_type IN ('A')
AND ATU.del_yn = 1 AND ATU.del_yn = 1
LIMIT 1 LIMIT 1
</select> </select>
@@ -20,7 +20,7 @@
INNER JOIN ALISTLMS.test_user_token ATUT ON ATUT.user_idx = ATU.user_idx INNER JOIN ALISTLMS.test_user_token ATUT ON ATUT.user_idx = ATU.user_idx
WHERE ATU.id = #{id} WHERE ATU.id = #{id}
AND ATU.del_yn = 1 AND ATU.del_yn = 1
AND ATUT.user_role IN ('T','S1','S2') AND ATUT.user_type IN ('T','S')
LIMIT 1 LIMIT 1
</select> </select>
@@ -28,6 +28,7 @@
/*LoginMapper.selectUserTokenByUserId*/ /*LoginMapper.selectUserTokenByUserId*/
select user_token_idx select user_token_idx
, user_role , user_role
, user_type
, refresh_token , refresh_token
from ALISTLMS.test_user_token from ALISTLMS.test_user_token
where user_idx = #{userIdx} where user_idx = #{userIdx}
@@ -37,6 +38,7 @@
/*LoginMapper.selectUserTokenByUserApiKey*/ /*LoginMapper.selectUserTokenByUserApiKey*/
select user_token_idx select user_token_idx
, user_role , user_role
, user_type
, refresh_token , refresh_token
from ALISTLMS.test_user_token from ALISTLMS.test_user_token
where user_api_key = #{userApiKey} where user_api_key = #{userApiKey}
@@ -46,6 +48,7 @@
/*LoginMapper.selectUserTokenByUserTokenIdx*/ /*LoginMapper.selectUserTokenByUserTokenIdx*/
select user_token_idx select user_token_idx
, user_role , user_role
, user_type
, refresh_token , refresh_token
from ALISTLMS.test_user_token from ALISTLMS.test_user_token
where user_token_idx = #{userTokenIdx} where user_token_idx = #{userTokenIdx}