스프링부트+jsp로 배달사이트 만들기-26 관리자페이지
2021. 12. 12. 01:18ㆍ카테고리 없음
관리자 계정으로 접속했을 때 관리자페이지로 이동 가능한 버튼을 만듭니다
reset.css 상단에 추가합니다
body { overflow-x: hidden; }
header.jsp와 css에 메뉴버튼을 추가합니다
header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> </head> <body > <!-- <body> --> <header> <div id="header"> <a href="/"><img src="/img/baemin.jpg" alt="이미지"> </a> <c:set var="ROLE" value="${SPRING_SECURITY_CONTEXT.authentication.principal.user.role }" /> <c:if test="${ROLE == 'ROLE_ADMIN' }"> <c:set var="uri" value="${requestScope['javax.servlet.forward.request_uri']}" /> <div class="menu_tab_box"> <div class="menu_tab"> <span> </span> <span> </span> <span> </span> </div> </div> <div id="menu"> <div class="box"> <c:choose> <c:when test="${fn:contains(uri, '/admin/management') }"> <div><a href="/admin/myStore">운영중인가게</a></div> <div><a href="/admin/main">주문접수</a></div> <div><a href="/admin/storeManagement">매장 관리</a></div> <div><a href="/admin/salesManagement">매출 확인</a></div> </c:when> <c:otherwise> <div><a href="/admin/myStore">운영중인가게</a></div> </c:otherwise> </c:choose> <div><a href="/">홈으로</a></div> </div> </div> <div id="menu_bg"></div> <script> console $(".menu_tab").click(function(){ const menuTab = $(this); const menu = $("#menu"); const menuBg = $("#menu_bg"); function hide(){ menuTab.removeClass("active"); menu.removeClass("active"); menuBg.hide(); } function show(){ menuTab.addClass("active"); menu.addClass("active"); menuBg.show(); } if($(this).hasClass("active")) { hide(); } else { show(); } if(menuBg.css("display") != "none") { menuBg.click(function(){ hide(); }) } }); </script> </c:if> </div> </header> <!-- 헤더 -->
계정의 권한이 ROLE_ADMIN일 경우에만 버튼이 보이게 했습니다
header.css
header { width: 100%; height: 80px; background: #2AC1BC; position: relative; } #header { width: 1200px; margin: 0 auto; } header img { width: 160px; } .menu_tab_box { position: absolute; top: 50%; right: 20px; transform: translateY(-50%); z-index: 10; } .menu_tab, .menu_tab span { display: inline-block; transition: all 0.4s; box-sizing: border-box; } .menu_tab { position: relative; width: 24px; height: 18px; cursor: pointer; /* display: none; */ } .menu_tab span { position: absolute; left: 0; width: 100%; height: 2px; background-color: #fff; border-radius: 4px; } .menu_tab span:nth-of-type(1) { top: 0; } .menu_tab span:nth-of-type(2) { top: 50%; transform: translateY(-50%); } .menu_tab span:nth-of-type(3) { bottom: 0; } .menu_tab.active span:nth-of-type(1) { transform: translateY(8px) rotate(-45deg); } .menu_tab.active span:nth-of-type(2) { opacity: 0; } .menu_tab.active span:nth-of-type(3) { transform: translateY(-8px) rotate(45deg); } header #menu { background: rgba(0, 0, 0, 0.9); width: 400px; height: 100vh; position: fixed; right: -400px; top: 0; z-index: 9; transition: all 0.4s; } header #menu.active { right: 0; } header #menu .box { margin-top: 80px; } header #menu .box a { color: #fff; display: block; width: 100%; height: 50px; line-height: 50px; font-size: 2rem; padding-left: 25px; } header #menu .box a:hover { background: #eee; color: #000; } header #menu_bg { background: rgba(0, 0, 0, 0.1); width: 100vw; height: 100vh; position: fixed; z-index: 8; top: 0; right: 0; display: none; } @media ( max-width :1250px) { #header { width: 99%; } } @media ( max-width :767px) { header img { width: 120px; position: relative; left: -15px; } header { height: 60px; } header #menu { width: 300px; right: -300px; } header #menu .box { margin-top: 60px; } }
db에서 계정의 권한을 ROLE_ADMIN으로 변경합니다
update bm_user set role = 'ROLE_ADMIN' where username = 'admin'; commit;
관리자페이지가 아닐 때

관리자페이지 일때

먼저 DB에 내가 관리 할 가게 테이블을 생성합니다
CREATE TABLE BM_MY_STORE ( USER_ID NUMBER, STORE_ID NUMBER ); ALTER TABLE BM_MY_STORE ADD CONSTRAINT MY_STORE_U FOREIGN KEY (USER_ID) REFERENCES BM_USER(ID) ON DELETE CASCADE; ALTER TABLE BM_MY_STORE ADD CONSTRAINT MY_STORE_S FOREIGN KEY (STORE_ID) REFERENCES BM_STORE(ID) ON DELETE CASCADE;
관리하고싶은 가게번호와 계정아이디로 등록합니다
INSERT INTO BM_MY_STORE (USER_ID, STORE_ID) VALUES (13, 7); COMMIT;
운영중인가게 페이지를 추가합니다
myStore.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="/WEB-INF/view/include/link.jsp" %> <link rel="stylesheet" href="/css/store/store-li.css"> <style> main h1 {text-align: center; margin: 20px; } .box .store .is_open {display: none; } </style> <%@ include file="/WEB-INF/view/include/header.jsp" %> <main> <h1>운영중인가게</h1> <div class="box"> <ul class="store"> <c:forEach items="${storeList }" var="storeList"> <%@ include file="/WEB-INF/view/store/store-li.jsp" %> </c:forEach> </ul> </div> </main> </body> </html>
AdminController를 생성합니다
@Controller public class AdminController { @Autowired private AdminService adminService; @Autowired private StoreService storeService; @GetMapping("/admin/myStore") public String myStore(@AuthenticationPrincipal LoginService user, Model model) { long userId = user.getUser().getId(); List<Store> storeList = adminService.myStore(userId); model.addAttribute("storeList", storeList); return "admin/myStore"; } @GetMapping("/admin/management/detail/{id}") public String detail(@PathVariable long id, @AuthenticationPrincipal LoginService user, Model model) { long userId = user.getUser().getId(); StoreDetail storeDetail = storeService.storeDetail(id, userId); model.addAttribute("store", storeDetail); model.addAttribute("adminPage", true); return "admin/detail"; } }
StoreController를 복사해 약간만 수정햐였습니다
AdminService
public interface AdminService { List<Store> myStore(long userId); }
AdminServiceImp
@Service public class AdminServiceImp implements AdminService { @Autowired private AdminDAO adminDAO; @Override public List<Store> myStore(long userId) { return adminDAO.myStore(userId); } }
AdminDAO
List<Store> myStore(long userId);
AdminDAOImp
@Override public List<Store> myStore(long userId) { return sql.selectList("admin.myStore", userId); }
AdminMapper
<select id="myStore" resultType="Store"> WITH R_COUNT AS ( SELECT STORE_ID ,ROUND(AVG(SCORE), 1) SCORE ,COUNT(REVIEW_CONTENT) REVIEW_COUNT ,COUNT(BOSS_COMMENT) BOSS_COMMENT_COUNT FROM BM_REVIEW GROUP BY STORE_ID ), STORE AS ( SELECT S.*, T.* FROM BM_STORE S LEFT JOIN R_COUNT T ON S.ID = T.STORE_ID LEFT JOIN BM_MY_STORE M ON S.ID = M.STORE_ID WHERE M.USER_ID = #{user_id } ) SELECT * FROM STORE </select>
