프로젝트 기록 및 회고/고객관리 프로그램

CRM 프로젝트 시작! - 회원가입/권한부여

cantor 2023. 6. 16. 11:56

초록

첫 팀 사이드 프로젝트로 체육관 고객관리 프로그램을 만들게되었습니다.

포지션 및 기술 스택

저의 포지션은 백엔드이고 아직 기술스택은 완전히 정해지지 않았습니다.
익스프레스 및 기타 react 관련 프레임워크로 서버를 설계하게 되었습니다.

게시판의 이용방향

이 카테고리에는 실제 로직을 제외한 개발 기록을 남기겠습니다.

훗날 제가 어떤 고민을 하고 얼마나 성장했는지 돌아볼 수 있는 기록이 되길 기대해봅니다.

현재 진행상황

작업내용 인지 (확인)

  1. 라우터 설계를 해야합니다.
  • 첨부파일 ppt 보고 천천히 설계할 예정입니다.
/
/login
  1. 트레이너 회원가입/ 로그인로직을 만들어야합니다.
- 유저는 가입창에서 트레이너/회원을 선택
    -  select 태그의 option value로 트레이너가 전달
    - join 컨트롤러는 하나만 만들기로 함
        - 전달받은 param을 통해 계정 종류를 구분


app.route("/join").post(getJoin) 

getJoin 로직

1. 전달받은 인자로 트레이너/ 회원 구분
2. 임시계정 생성 
3. 관리자에게 정식계정 승인 요청
4. 로그인 페이지로 이동/ 로그인 가능

고민

  1. ORM 사용..?
  2. 임시/정식계정분류 방식
  3. 관리자 승인요청방식
  1. 계정 분류 방식
현재는 간단하게 계정내에 특정 변수를 통해
임시/정식계정 분류를 하는것으로생각중입니다.

ex) 
계정에 다음과 같은 데이터를 삽입 
verified : false 

관리자에게 승인요청 
-> 승인시 verified: 가 true로 전환
  1. 승인요청 방식
A. 이메일전송 외부 api를 사용
    - 승인 http 메서드를 발생시키는 링크를 포함한 email을 관리자에게 전송

B. 프로그램 자체적으로 관리자의 로그인 페이지에 메시지를 띄워줌
    - 관리자가 가입자 정보를 읽고 승인시 http 메서드가 발생, 
        verified가 true로 변하면 정식계정으로 전환

기타 공부한것

접근제어방식

학습 이유

트레이너 유저를 위해 스케쥴 생성, 담당 회원 멤버바인딩 및 해제 와 같은 기능을
구현할 예정입니다.

명세서를 천천히 살펴보고 나서 핵심기초 기능은
여러가지 권한을 부여하거나/ 회수하는 것이 기본이기에 기초지식을 공부했습니다.

또 현재 당장 구현해야 하는것과도 맞닿아 있습니다.

1. 계정생성시 `트레이너 임시계정`으로 생성 ->
2. 관리자에게 회원가입 승인 요청 ->
3. 관리자가 승인시 계정을 `일반 트레이너 계정`으로 전환

학습 내용

A. 화이트리스트/ 블랙리스트

자원별 접근가능자를 설정/ 혹은 자원별로 접근불가능자를 설정

* 기본적으로 admin이 직접 권한을 부여하는 식으로 이루어져있기 때문에
다수의 권한에대한 접근제어방식으로는 적합하지 않습니다.

- 예시 용도

    -특정 계정의 권한설정이 잘못된경우에, 관리자가 임시조치
    -전체 payment 기록로그에는 admin만 접근할 수있도록 설정

B. 역할기반 접근제어방식

모델에 역할을 직접 부여하거나/  역할이 부여되어있는 그룹에 추가

사용자를 그룹화하고, 각 그룹에 특정 권한을 부여함으로써 접근 제어를 관리합니다.

* sql에서 트레이너와 멤버의 테이블을 구분지어 만드는것은
역할기반 접근 제어방식의 구현을 수월하게 만듭니다.

- 예시용도
    트레이너팀 스케쥴관리 기능을추가시
    해당 스케쥴에대한 수정 권한을 부여

    기존의 트레이너와 바인딩이 끊어진 회원정보에
    트레이너계정 보유자들이 접근가능

C. 소유권 기반 접근제어 방식

SNS 계정처럼 특정 요소에 소유자 본인만 접근하게 함

wetube 클론 강의에서  video를 수정하거나 삭제할때, 
해당 영상의 owner랑 일치하는지 확인하는 코드를 작성했었습니다.

제 postVideoEdit 코드입니다.

if ( String(video.owner) !== String(userId)) {
        req.flash("error", "authorized for only video uploader");
        return res.status(403).redirect("/");
    }

- 예시 용도 
    트레이너가 스케쥴게시글을 수정 및 삭제 
    댓글, 공지, 게시글작성과 비슷한 모든 sns 기능

D. 접근제어 목록

이 방식은 각 자원에 접근할 수 있는 사용자나 그룹의 목록을 직접 관리합니다. 
이 방식은 자원이 사용자나 그룹에 따라 다양한 접근 권한을 가질 수 있어야 하는 경우에 사용됩니다.

-예시 용도
    - 관리자가 특정 개체들에게만 보내는 공지게시글
        - 트레이너는 읽기만가능, 일반회원은 접근불가

출처

웹 개발자를 위한 웹 보안
말콤 맥도널드/ 에이콤출판사

앞으로 공부할것

데이터주도설계, 도메인주도 설계 기본개념에대한 책을 통해
백엔드 설계 패러다임을 가볍게 공부하려합니다.

현재하고있는것

리액트