관리자 회원가입 구현

jihan kong·2023년 5월 19일
0
post-thumbnail

한동안 여러 시험과 코테들을 보느라 바쁜 나날들을 보내고 있다.🥲 따로 포스팅할 기회가 있으면 좋을 것 같은데 한 가지 좋은 소식으로는 지난달 프로그래머스 백엔드 데브코스를 지원했던 것의 코딩테스트 결과가 나왔다. 결과는 합격!🎉 그리고 지금은 면접까지 본 상태이다. 아마 내일 중으로 결과가 나올 듯 한데, 잘은 모르겠다... 그냥 일단은 기다려보고 있는 상태이다.

개인 프로젝트를 그동안 너무 소홀히 했는데, 일단은 간단한 기능, 그리고 전부터 수정하기 원했던 기능을 손보는 시간을 가졌다.

1. 이전의 회원가입

관리자 회원가입 기능은 사실 구현해놓았었다. 그러나, 한 가지 Role 을 코드상에서만 변경해서 회원가입을 해야한다는게 좀 아쉬웠다. 무슨 말이냐하면...

Member.java

package com.shop.entity;

import com.shop.constant.Role;
import com.shop.dto.MemberFormDto;
import lombok.*;
import org.springframework.security.crypto.password.PasswordEncoder;
import javax.persistence.*;

public class Member extends BaseEntity{   

	// ...(중간 생략)

    public static Member createMember(MemberFormDto memberFormDto,
                                      PasswordEncoder passwordEncoder) {

        Member member = new Member();
        member.setName(memberFormDto.getName());
        member.setEmail(memberFormDto.getEmail());
        member.setAddress(memberFormDto.getAddress());
        String password = passwordEncoder.encode(memberFormDto.getPassword());      // 스프링 시큐리티 설정 클래스에 등록한 BCryptPasswordEncoder Bean을 파라미터로 넘겨서 비밀번호 암호화
        member.setPassword(password);
        member.setRole(Role.USER);	// Role 설정
        return member;
    }

이처럼 createMembernew Member 를 생성하게 되면 무조건 Role 권한이 USER 인 회원으로만 회원가입이 될 것이다. 관리자(admin)로 회원가입을 하고 싶을때는 createMember 메소드의 member.setRoleAdmin 으로 바꾸고, 일반 회원으로 가입하려면 Role 을 다시 USER 로 바꿔주어야한다. 번거롭기 짝이 없는 설정이다.

이를 웹 페이지 상에서 설정하여 코드를 수정할 필요 없이 저장되게 하고 싶었다.


2. 변경된 코드

1. Back 단

이를 구현하기 위해 어떤 부분을 수정해야할지 생각했다. 결론은 하나..! 그냥 메소드 하나를 더 만드는 것. (간단해서 죄송합니다) createAdminMember 라는 메소드를 Member 클래스에 추가했다.

Member.java

package com.shop.entity;

import com.shop.constant.Role;
import com.shop.dto.MemberFormDto;
import lombok.*;
import org.springframework.security.crypto.password.PasswordEncoder;
import javax.persistence.*;

public class Member extends BaseEntity{   

	// ...(중간 생략)    
    
    public static Member createAdminMember(MemberFormDto memberFormDto,
                                      PasswordEncoder passwordEncoder) {

        Member member = new Member();
        member.setName(memberFormDto.getName());
        member.setEmail(memberFormDto.getEmail());
        member.setAddress(memberFormDto.getAddress());
        String password = passwordEncoder.encode(memberFormDto.getPassword());      // 스프링 시큐리티 설정 클래스에 등록한 BCryptPasswordEncoder Bean을 파라미터로 넘겨서 비밀번호 암호화
        member.setPassword(password);
        member.setRole(Role.ADMIN);		// Role 설정
        return member;
    }

메소드를 ADMIN 으로 설정했기 때문에 이제 이 메소드를 통해 생성된 회원은 권한이 관리자가 될 것이다.

이제 통로를 만들 차례이다.

MemberController.java

package com.shop.controller;

// (..import 생략)

@RequestMapping("/members")
@Controller
@RequiredArgsConstructor
public class MemberController { 

	// (...코드 생략)

    @GetMapping(value = "/newAdmin")              
    public String adminMemberForm(Model model) {
        model.addAttribute("memberFormDto", new MemberFormDto());
        return "member/memberForm";
    }

    @PostMapping(value = "/newAdmin")
    public String newAdminMember(@Valid MemberFormDto memberFormDto,         // 검증하려는 객체의 앞에 @Valid 어노테이션을 선언하고, 파라미터로 bindingResult 객체 추가
                            BindingResult bindingResult, Model model) {      // 검사 후 결과는 bindingResult에 담아줌.

        if(bindingResult.hasErrors()) {         // 에러가 있다면 회원 가입 페이지로 이동
            return "member/memberForm";
        }

        try {
            Member member = Member.createAdminMember(memberFormDto, passwordEncoder);
            memberService.saveMember(member);
        } catch (IllegalStateException e) {
            model.addAttribute("errorMessage", e.getMessage());     // 회원 가입 시 중복 회원 가입 예외가 발생하면 에러 메시지를 뷰로 전달
            return "member/memberForm";
        }

        return "redirect:/";
    }
    
    // (..코드 생략)

MemberController 에서 /newAdmin 으로 매핑된 주소로 접속하면 일반 회원의 회원가입 폼은 똑같이 주어지지만 Member.createAdminMember 즉, createAdminMember 메소드에 접근하여 save가 된다. 결과적으로 관리자 회원이 만들어지게 된다.

2. Front 단

따로 관리자 회원 가입을 할 수 있도록 버튼을 만들었다. 버튼을 누르게 되면 미리 만들어놓은 /newAdmin 주소로 들어가게 된다.


3. 동작화면 🕹️

관리자 회원가입 페이지로 접속하여 필수정보들을 입력하고 제출하기 버튼을 누르면

위와 같이 이메일 kjh1@naver.com 으로 회원가입한 회원은 상품등록과 상품관리 메뉴가 뜨는 것으로 보아 관리자로 회원가입이 잘 되었다.

이제 그냥 회원가입 버튼을 눌러서 회원가입을 해보자.


회원정보를 입력하고 제출하기 버튼을 누르면...

kjh2@naver.com 으로 가입한 계정은 장바구니와 구매이력만 볼 수 있다. 따라서 일반 회원으로 가입되었다는 것을 알 수 있다.

profile
학습하며 도전하는 것을 즐기는 개발자

0개의 댓글