| 회원 상세페이지에서 회원 상태변경하기
- 회원 목록 --> 회원 상세정보 뷰
- 오늘 수업에서 만든 상세정보 뷰는 매우 간소화된 폼이었다.
- 큰 서비스를 제공하는 회사의 경우, 이보다는 더 복잡할 것 같다.
ex. 만약 에듀테크 회사의 LMS라면, 여기에 결제내역, 수강이력, 이벤트 참여 이력 등등등이 포함될 것 같다.
- 오늘 배운 내용에서 가져가야할 점은, 서비스 관리자(ex. 영업/관리팀)가 직접 회원 상태를 변경할 수 있도록 해주는게 필요하다는 점. 그리고 그것은 MVC를 통해서 할 수 있다는 점.
* LMS Users Administration 예시
https://www.vedamo.com/knowledge/platform-tutorials/lms-users-administration/
LMS Users Administration | VEDAMO
The LMS Users Administration menu allows you to create and manage accounts on your learning management system. See how to do that here.
www.vedamo.com
| 오늘 새로 배운 기술
1. Thymeleaf 를 통해 Element의 href, value 속성에 parameter값 주입
<a th:href="${'detail.do?id=' + x.userId}" th:text="${x.userId}" ></a>
<input th:value="${member.userId}" type = "hidden" name = "userId">
ㄴ form을 아래처럼 사용할 수 있었다.
<tr>
<th>회원 상태</th>
<td>
<p>
현재 상태 <span th:text="${member.userStatus}"></span>
</p>
<div>
<form method = "post" action = "/admin/member/status.do">
<input th:value="${member.userId}" type = "hidden" name = "userId">
<select name = "userStatus">
<option value = "REQ">가입승인중</option>
<option value = "ING">정상이용중</option>
<option value = "STOP">정지중</option>
</select>
<button type = "submit">상태 변경</button>
</form>
</div>
</td>
</tr>
<tr>
<th>비밀번호 초기화</th>
<td>
<div>
<form method = "post" action = "/admin/member/password.do">
<input th:value="${member.userId}" type = "hidden" name = "userId">
<input type = "password" name = "password">
<button type="submit">비밀번호 초기화</button>
</form>
</div>
</td>
</tr>
2. 인터페이스로 사용자정의 예외코드 작성해보기
- 일전에 배운 수업의 강사A분께서는, Enum타입으로 ErrorCode를 작성하고, 이걸 사용자정의 Exception으로 만들어서 처리를 해주었는데
- 이번에 배운 수업의 강사B분께서는. interface로 ErrorCode를 작성하고, 이걸 사용자정의 Exception으로 만들어서 처리해주었다.
- 방식의 차이이긴 한데, 재미있었던 점은 interface에서 맴버변수를 각성한 경우, 이걸 가져올 때 마치 Math.PI처럼 static하게 가져올 수 있었다는 점이다.
package com.example.fastlms.member.entity;
public interface MemberCode {
// 가입 요청 중
String MEMBER_STATUS_REQ = "REQ";
// 현재 이용중인 상태
String MEMBER_STATUS_NORMAL_ING = "ING";
// 정지 상태
String MEMBER_STATUS_STOP = "STOP";
}
/**
* LDAP 사용자 인증
* - 회원 정보가 잘못된 경우, 메일이 미인증된 경우 실패 응답
* - 시큐러티의 GrantedAuthority를 통해 사용자 권한/역할 추가
*/
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
Optional<Member> optionalMember = memberRepository.findById(username);
// validate
if (!optionalMember.isPresent()) {
throw new UsernameNotFoundException("회원 정보가 존재하지 않습니다.");
}
Member member = optionalMember.get();
if (MemberCode.MEMBER_STATUS_REQ.equals(member.getUserStatus())) {
throw new MemberNotEmailAuthException("이메일 활성화 이후 로그인 해주세요.");
}
if (MemberCode.MEMBER_STATUS_STOP.equals(member.getUserStatus())) {
throw new MemberStopUserException("정지된 회원입니다.");
}
// 사용자 권한, Role 추가
List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));
if (member.isAdminYn()) { // 관리자일 경우
grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
}
return new User(member.getUserName(), member.getPassword(), grantedAuthorities);
}
[ 참고 및 출처 ]
부트캠프 수업 이후 정리한 내용입니다.
'Framework > 프로젝트로 스프링 이해하기' 카테고리의 다른 글
[LSM 만들기] 강좌 목록 구현하기 - 스마트에디터, 등록/수정 동시 처리 (0) | 2022.10.07 |
---|---|
[LMS 만들기] 카테고리 수정, 삭제, 정렬 (0) | 2022.10.06 |
[LMS만들기] 페이징 처리하기 (with MyBatis) (0) | 2022.10.05 |
[LMS만들기] 회원 검색 기능 구현 (0) | 2022.10.04 |
[LMS 만들기] JPA와 MyBatis로 회원 목록 구현 (1) | 2022.10.04 |