diff --git a/src/main/java/nlib/bbs/service/QnaService.java b/src/main/java/nlib/bbs/service/QnaService.java index f50c42dd..876029da 100644 --- a/src/main/java/nlib/bbs/service/QnaService.java +++ b/src/main/java/nlib/bbs/service/QnaService.java @@ -55,6 +55,15 @@ public interface QnaService extends BoardService * @throws Exception */ public String canModify(ArticleVO articleVO) throws Exception; + + /** + * 해당 QNA 글을 변경할 수 있는지 여부를 확인한다. + * + * @param articleVO + * @return + * @throws Exception + */ + public String canModify(ArticleVO articleVO, String mbInfoId) throws Exception; /** * 해당 QNA 글을 읽을 수 있는지 여부를 확인한다. diff --git a/src/main/java/nlib/bbs/service/impl/QnaServiceImpl.java b/src/main/java/nlib/bbs/service/impl/QnaServiceImpl.java index 6f4b1473..01834073 100644 --- a/src/main/java/nlib/bbs/service/impl/QnaServiceImpl.java +++ b/src/main/java/nlib/bbs/service/impl/QnaServiceImpl.java @@ -185,6 +185,7 @@ public class QnaServiceImpl extends BoardServiceImpl implements QnaService /** * 해당 QNA 글을 변경할 수 있는지 여부를 확인한다. + * (articleVO.getLoginedMbInfoId() 값을 확인하여 DB에 저장된 게시글을 조회하여 검사하므로 호출 전 설정 필요) * * @param articleVO * @return @@ -196,13 +197,30 @@ public class QnaServiceImpl extends BoardServiceImpl implements QnaService return "로그인 후, 이용하실 수 있습니다."; } - ArticleVO savedArticleVO = selectArticle(articleVO); + return canModify(selectArticle(articleVO), articleVO.getLoginedMbInfoId()); + } + + /** + * 해당 QNA 글을 변경할 수 있는지 여부를 확인한다. + * + * @param articleVO + * @return + * @throws Exception + */ + public String canModify(ArticleVO articleVO, String mbInfoId) throws Exception { + if(StringUtil.isEmpty(mbInfoId)) { + return "로그인 후, 이용하실 수 있습니다."; + } - if(!"Y".equals(savedArticleVO.getMyQnaYn())) { + if(articleVO == null) { + return "대상 게시글 정보가 없습니다."; + } + + if(!"Y".equals(articleVO.getMyQnaYn())) { return "본인의 글만 변경할 수 있습니다."; } - if("Y".equals(savedArticleVO.getAnswerYn())) { + if("Y".equals(articleVO.getAnswerYn())) { return "이미 답변완료된 글은 변경할 수 없습니다."; } diff --git a/src/main/java/nlib/bbs/web/QnaController.java b/src/main/java/nlib/bbs/web/QnaController.java index 55e4c564..dde9a988 100644 --- a/src/main/java/nlib/bbs/web/QnaController.java +++ b/src/main/java/nlib/bbs/web/QnaController.java @@ -250,8 +250,6 @@ public class QnaController extends NlibCommonController { , RedirectAttributes redirectAttrs , ModelMap model) throws Exception { - log.debug("========================================> insertQna : 진입함"); - NlibLoginVO loginVO = getNlibLoginVO(authentication); String message = null; @@ -307,7 +305,6 @@ public class QnaController extends NlibCommonController { String attachFileId = (String)(fileListObj.get(0).get("attachFileId")); if(StringUtil.isEmpty(attachFileId)) { - log.error("첨부파일 아이디(attachFileId) 값은 필수 항목입니다. 첨부파일 처리에 실패하였습니다. 그러나, 게시물 등록은 계속 진행됩니다."); attachFileId = UUID.getNewAttachFileId(); } @@ -381,7 +378,10 @@ public class QnaController extends NlibCommonController { // 권한 및 변경 가능 상태 체크 articleVO.setLoginedMbInfoId(getMbInfoId(request)); - String message = qnaService.canModify(articleVO); + + ArticleVO articleOrg = qnaService.selectArticle(articleVO); + String message = qnaService.canModify(articleOrg, getMbInfoId(request)); + if(message != null) { redirectAttrs.addFlashAttribute("searchArticle", articleVO); redirectAttrs.addFlashAttribute("message", message); @@ -422,38 +422,35 @@ public class QnaController extends NlibCommonController { if(fileListObj != null && fileListObj.size() > 0) { - String attachFileId = (String)(fileListObj.get(0).get("attachFileId")); + String attachFileId = articleOrg.getBdAttachFileId(); if(StringUtil.isEmpty(attachFileId)) { - log.error("첨부파일 아이디(attachFileId) 값은 필수 항목입니다. 첨부파일 처리에 실패하였습니다. 그러나, 게시물 등록은 계속 진행됩니다."); - } - - if(StringUtil.isNotEmpty(attachFileId)) { - if(StringUtil.isNotEmpty(articleVO.getBdAttachFileId())) articleVO.setBdAttachFileId(attachFileId); - - String fileSStreCours = NlibProperty.getProperty("fileupload.base.path") + NlibProperty.getProperty("fileupload.bbs.qna.subpath") + "/"; - List attachFiles = new ArrayList(); - - for(int i=0; i attachFiles = new ArrayList(); + + for(int i=0; i 0) { String attachFileId = (String)(removedFileListObj.get(0).get("attachFileId")); + if(StringUtil.isEmpty(attachFileId)) attachFileId = articleOrg.getBdAttachFileId(); + if(StringUtil.isEmpty(attachFileId)) { log.error("첨부파일 아이디(attachFileId) 값은 필수 항목입니다. 첨부파일 삭제에 실패하였습니다. 그러나, 게시물 변경은 계속 진행됩니다."); } - if(StringUtil.isNotEmpty(attachFileId) && attachFileId.equals(articleVO.getBdAttachFileId())) { + if(StringUtil.isNotEmpty(attachFileId) && attachFileId.equals(articleOrg.getBdAttachFileId())) { List removedAttachFiles = new ArrayList(); diff --git a/src/main/webapp/WEB-INF/jsp/nlib/bbs/insertQnaForm.jsp b/src/main/webapp/WEB-INF/jsp/nlib/bbs/insertQnaForm.jsp index b066b91d..4d77e0d6 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/bbs/insertQnaForm.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/bbs/insertQnaForm.jsp @@ -51,15 +51,15 @@