관리자에게만 글쓰기 버튼 보이도록 설정하기

·2024년 12월 2일

개인프로젝트

목록 보기
7/11
-- 회원 테이블
CREATE TABLE MEMBER
(
    midx int NOT NULL AUTO_INCREMENT PRIMARY KEY, -- 회원번호
    memberid varchar(20) NOT NULL, -- 아이디
    memberpw varchar(20) NOT NULL, -- 비밀번호
    memberemail varchar(50) NOT NULL, -- 이메일
    membername varchar(40) NOT NULL, -- 이름
    memberbirth date NOT NULL, -- 생일
    memberphone varchar(20) NOT NULL, -- 핸드폰 번호
    membergender char NULL, -- 성별
    regdate DATETIME default now() NOT NULL, -- 가입일
    delyn char DEFAULT 'N', -- 삭제여부
    ip varchar(40) NOT NULL,
    grade varchar(10) DEFAULT 'user', -- 회원등급
    filename varchar(500) -- 파일이름
);

우선 관리자와 일반 유저를 구분할 컬럼이 필요하다. grade 컬럼을 넣어서 기본값을 user로 등록을 해놨다.

-- 관리자 등급 설정
UPDATE member
SET grade = 'admin'
WHERE midx = 3; -- 

내 정보로 회원가입을 한 뒤에 특정 midx값을 user에서 admin으로 변경해서 관리자로 구분하기.

	@RequestMapping(value="memberLoginAction.aws", method=RequestMethod.POST)
	public String memberLoginAction(
			@RequestParam("memberid") String memberid, 
			@RequestParam("memberpw") String memberpw,
			RedirectAttributes rttr, // 리다이렉트 시 일회성 데이터를 전달하기 위한 객체
			HttpSession session		// 세션 객체, 로그인 상태를 유지하는 데 사용
			) {
		//System.out.println("멤버 로그인 액션 ");
		MemberVo mv = memberService.memberLoginCheck(memberid);
		//저장된 비밀번호를 가져온다. 
		
		// 로그인 후 이동할 경로 초기화
		String path = "";
		if(mv != null) { // 회원 정보가 존재할 경우
		String reservedPw = mv.getMemberpw();  // 저장된 비밀번호를 가져옴
		
		 // 입력한 비밀번호와 저장된 비밀번호를 비교
		 if(bCryptPasswordEncoder.matches(memberpw, reservedPw)) { // 비밀번호가 일치할 경우
			 //System.out.println("비밀번호 일치");
			 rttr.addAttribute("midx",mv.getMidx());
			 rttr.addAttribute("memberId",mv.getMemberid());
			 rttr.addAttribute("memberName",mv.getMembername());
			 
			 // **등급을 세션에 저장**
			 session.setAttribute("grade", mv.getGrade());
			 
			// 로그인 요청 이전 페이지가 세션에 저장되어 있는지 확인
			// logger.info("saveUrl==> " + session.getAttribute("saveUrl"));
			 
			 if(session.getAttribute("saveUrl") != null) {
				 // 이전 페이지로 리다이렉트
				 path ="redirect:"+ session.getAttribute("saveUrl").toString();
			 }else {
				// 기본 페이지로 리다이렉트
				 path ="redirect:/";
			 }
			 
		  }else {
			  // 비밀번호가 일치하지 않을 경우 경고 메시지를 설정하고 로그인 페이지로 리다이렉트
			  rttr.addFlashAttribute("msg","아이디/비밀번호를 확인해주세요");
			  path = "redirect:/member/memberLogin.aws";
		  }
		}else {
			  // 아이디에 해당하는 회원 정보가 없을 경우 경고 메시지 설정 후 로그인 페이지로 리다이렉트
			  rttr.addFlashAttribute("msg","해당하는 아이디가 없습니다."); //일회성 메소드 메세지가 한 번만 나온다
			path = "redirect:/member/memberLogin.aws";
		}
		//회원정보를 세션에 담는다.
		return path;
	}	

MemberController에서 로그인을 처리하는 메서드로 가서 session.setAttribute("grade", mv.getGrade()); 코드를 추가해서 회원등급을 세션에 저장해준다.

	//게시글 목록을 조회하고 검색 조건에 맞는 게시글을 화면에 표시하는 메서드
	@RequestMapping(value="monthlyList.aws", method=RequestMethod.GET)
	public String monthlyList(SearchCriteria scri, Model model, HttpSession session) {
		
	    // 세션에서 사용자 등급 가져오기
	    String grade = (String) session.getAttribute("grade");
		
		// 총 게시글 수를 검색 조건(scri)을 기준으로 조회
		int cnt = monthlyService.monthlyTotalCount(scri);
		// PageMaker 객체에 검색 조건과 총 게시글 수를 설정하여 페이지 네비게이션을 준비
		pm.setScri(scri);
		pm.setTotalCount(cnt);
			
		// boardService에서 주어진 검색 조건(scri)을 기반으로 게시글 목록을 조회
		ArrayList<MonthlyVo> mlist = monthlyService.monthlySelectAll(scri);
		
		// 조회된 게시글 목록을 "mlist"라는 이름으로 모델에 추가하여 JSP 뷰 페이지로 전달
		model.addAttribute("mlist",mlist);
		// PageMaker 객체도 모델에 추가하여 JSP 뷰에서 페이지 정보도 접근할 수 있도록 설정
		model.addAttribute("pm",pm);
	    // 사용자 등급을 모델에 추가하여 뷰에서 활용할 수 있도록 설정
	    model.addAttribute("grade", grade);
			
		//경로에 해당하는 JSP 뷰 페이지를 반환
		return "WEB-INF/monthly/monthlyList";
		}

회원등급 구분이 필요한 컨트롤러 메서드로 가서 매개변수에 HttpSession session을 추가한다.
String grade = (String) session.getAttribute("grade") 세션에서 사용자 등급을 가져오고, model에 회원등급을 담아서 jsp로 전달.

<!-- 글쓰기 버튼 (관리자만 보이게) -->
<c:if test="${sessionScope.grade == 'admin'}">
    <div class="write-button-container">
        <a href="${pageContext.request.contextPath}/monthly/monthlyWrite.aws" class="write-button">글쓰기</a>
    </div>
</c:if>

jstl로 코드를 작성을 하기 위해선 맨 위 상단에 꼭 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 적어주세용.
이렇게 하면 관리자가 아닌 일반 유저는 글쓰기 버튼을 보지 못한다.

0개의 댓글