코디잉

10_관리자>관리자계정관리 본문

PROJECT/같이사자(공동구매)

10_관리자>관리자계정관리

yong_ღ'ᴗ'ღ 2022. 8. 16. 04:06

회원insert,update,delete 관련 마지막 작업,,,,아마,,!!! 관리자페이지의 관리자계정관리파트!

 

관리자페이지에서는 insert, update, delete 작업하는 경우나 작성하다가 <목록으로> 버튼을 눌렀을 경우에 한 번 더 정말 그 작업을 수행할거냐고 알림을 띄웠다.

 

-관리자는 대표관리자 포함 최대 10명까지 등록 가능

-대표관리자는 한 명(수정 및 삭제 불가)

-대표관리자는 다른 모든 관리자들의 정보 수정 및 삭제 가능 / 일반 관리자 계정 생성 가능

-일반관리자는 본인의 정보만 수정 가능 (본인거라도 삭제는 불가 / 계정 생성 불가)

 

① 관리자계정 목록 작업

대표관리자 → <계정생성>버튼 및 모든 일반관리자 계정의 <수정><삭제>버튼 활성화되어 있음

일반관리자 → 본인 계정의 <수정> 버튼만 활성화되어 있음

 

그 전에,

관리자 페이지의 주소를 직접 입력해서 들어오는 비회원/회원 혹은 대표관리자만 접근가능한 페이지에 일반관리자가 들어오려고 하는 경우에는 못들어오게 막아놨다. (로그아웃 된 상태로 로그인폼 페이지로 이동)

잘못된 방법으로 허용되지 않은 페이지에 접근한 경우 알림창

 

② <계정생성> 관련 작업

<계정생성>을 클릭하면, 계정생성폼 페이지로 이동한다.

회원파트에서의 회원가입과 동일하게 form 과 script 처리를 했다.

회원과 다른 점은 관리자의 아이디 형식은 이메일이 아닌 것

- 아이디 형식 체크 (6~15자, 영문자로 시작, 영어소문자+숫자 조합)

- 아이디 중복체크

- 아이디, 이름 입력한 공백 제거

- 휴대폰번호 자릿수확인

- 휴대폰번호 중복체크

- 휴대폰 인증번호 전송 및 인증번호 확인

- 모든 항목 작성했는지 체크

- 이름 형식 체크

- 아이디/휴대폰번호 값 바꿨다면 다시 중복확인 및 인증 진행했는지 체크

- 비밀번호 형식 맞는지 체크

- 비밀번호 == 비밀번호확인 체크

 

🔥 아이디 중복확인하려는데 ajax처리가 계속 안됐다,,,,Uncaught TypeError:$.ajax is not a function 오류가 났다.

jQuery slim을 사용하면 $.ajax() 를 사용할 수 없다..........고 한다.......

slim을 뺀 버전으로 cdn을 작성해주니 해결완료,,!

내용을 제대로 작성한 후에, <계정생성>을 클릭하면 확인 알림창이 뜬다.

계정을 생성하면 다시 목록으로 이동하고, 거기서 추가된 관리자를 확인할 수 있다.

 

관리자는 10명까지만 등록이 가능해서, 관리자가 이미 10명일 경우에는 계정생성 못하게 처리했다.

테스트 데이터로 10명을 넣어놓고, <계정생성> 버튼을 누르면..!

🔥 계정생성 관련 SQL 구문 (CONNECT BY LEVEL)

관리자와 회원 모두 member_code를 primary key로 갖는 회원테이블에 존재하고, 각각 관리자정보테이블, 회원정보테이블에 자세한 데이터들이 담겨져있다.

member_code는 시퀀스를 사용했는데,

관리자는 최대 10명까지만 등록하기로 정해놨고, 관리자는 member_code에서 M1~M10 의 숫자 범위 안에서만 사용하기로 했다. (대표관리자는 M1로 고정)

그렇기 때문에 만약 중간 숫자가 없으면 없는 숫자 중에 최솟값으로 member_code를 갖도록 설정하고 싶었다.

SELECT MIN(NUM)
FROM
(
    SELECT LEVEL "NUM"
    FROM DUAL
    CONNECT BY LEVEL <= 10
    MINUS
    SELECT TO_NUMBER(SUBSTR(MEMBER_CODE, 2)) FROM ADMIN_INFO
);

계정생성도 회원가입과 마찬가지로 회원테이블과 관리자정보테이블에 모두 INSERT 작업을 해줘야하므로 프로시저 만듦!

 

③ <수정> 관련 작업

세션에 멤버코드를 심어둬서 그걸 사용해서 수정폼에 회원 정보를 가져올까 했는데, 대표 관리자는 모든 관리자의 수정폼에 접근할 수 있으므로,,,,❌

주소에 GET방식으로 목록에서 썼던 id를 넘겨줘서 회원 정보를 가져오는 방식으로 진행했다.

<수정> 버튼의 value로 id를 넘겨놓고 click하면 그 값을 받아왔다.

<button type="button" class="adminBtn updateAccountBtn" value="${admin.id }">수정</button>
$(".updateAccountBtn").click(function()
{
    location.href = '<%=cp%>/admin_accountupdateform.lion?id=' + this.value;
});

수정폼예시-1
수정폼예시-2

수정폼은 회원>마이페이지>개인정보수정 파트와 동일하게 form과 script 처리를 해줬다.

-아이디, 이름은 수정 못하게 하기 위해서 readonly 속성 부여

-비밀번호 형식 확인 (8~16자, 영어/숫자/특수문자 하나 이상 포함), 입력가능 특수문자(!, @, #, $, %, ^, +, -, =)

-현재 사용중인 휴대폰번호일 경우, <인증번호 전송> 못하게 하기

-필수항목 비어있는지 체크(현재 비밀번호, 휴대폰번호)

-휴대폰번호 값 변경여부 확인하고 인증했는지 체크(현재 번호와 동일하면 skip)

-비밀번호 변경 시, 비밀번호 형식 맞는지 & 새 비밀번호 == 새 비밀번호 확인 값 동일한지 체크

-입력한 현재 비밀번호 == 현재 비밀번호 확인 → 이건 Controller에서 진행했다.

 

🔥 <계정 수정>을 하면 현재비밀번호만 체크하고, 그 결과만 model.addAttribute() 사용해서 다시 계정수정폼으로 가려고 했는데,  수정폼을 호출하는 주소에 id를 넘겨주고 있는 상황이었는데 id가 넘어오지 않으니 에러가 났다.

 Controller에서 id랑 비밀번호체크결과 모두 model.addAttribute() 로 넘겨주었다.

<계정수정> 버튼 클릭
현재 비밀번호 잘못 입력했을 경우,
정상적으로 수정작업이 진행되었을 경우

④ <삭제> 관련 작업

관리자가 삭제되어도 해당 관리자가 작성했던 공지글이나 문의답변, 혹은 처리했던 신고가 삭제되면 안되기 때문에,,!!

회원테이블-관리자정보테이블을 따로 만들어놨다.

<수정>과 동일하게 button의 value에 id를 넣어놓고 주소로 넘겨줘서 id를 사용하여 삭제처리했다.

<삭제>버튼 클릭 시,
<삭제> 작업 완료 후

뒤에 목록을 보면 ID가 admin7인 계정을 삭제해서 없어진 걸 확인할 수 있다 ㅎㅅㅎ~

 

마지막 테스트를 위해 삭제를 무작위로 더 진행하고,

⑤ 아래의 상태에서 계정을 생성할 경우, 의도했던 대로 MEMBER_CODE가 M1~M10 사이의 비어있는 숫자 중 최솟값으로 잘 들어가는지 테스트~!

테스트 전 DB 상황

현재 M1~M10 중, M7 M8 M10 이 비어있는 상태이므로

여기서 새로운 관리자를 넣으면 의도대로라면 MEMBER_CODE = M7로 들어가면 된다!

🔥  → 하다가 에러가 나서 고치다보니 좋은 방법은 아닌 것 같다...ㅎㅎ

관리자를 삭제할 때, 관리자정보테이블에서만 삭제하고 해당 관리자가 처리한 업무는 보관하기 위해 회원테이블(primary key: member_code)에서는 삭제하지 않는다.

그런데 primary key는 중복될 수 없으니, 이미 있는 MEMBER_CODE 로 관리자를 새로 생성하려면

회원테이블에  INSERT가 아니라 회원테이블을 UPDATE하고 관리자정보테이블에 INSERT 해야 된다.

이러다보면 직원6이 퇴사하고 직원12가 그 MEMBER_CODE를 받아서 작업하면.... 여러 명이 작업한게 하나의 MEMBER_CODE에 쌓여가는 거니까 좋은 방법이 아닌 듯,,,,

MEMBER_CODE를 세션에 저장해놓고 1~10번이 관리자라는 걸 사용해서 다른 작업을 처리하기 편하게 하려고 했는데, 이건 생각을 못했었다,,,,,!,,

다음 번에 이런 작업을 할 때는 그냥 시퀀스로 쭉 나가게 해야지.....

 

암튼,,,이번에 의도했던 대로는 완료했다,,

테스트 후 DB 상황 (MEMBER_CODE가 'M7'로 들어갔음)

관리자계정관리 끄읏...z_z

Comments