-- 회원 테이블
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" %> 적어주세용.
이렇게 하면 관리자가 아닌 일반 유저는 글쓰기 버튼을 보지 못한다.