trazzle / trazzle-server

trazzle service REST APIs
https://trazzle.p-e.kr/api-docs#/
1 stars 0 forks source link

Issues/traz-15 #18

Closed loveAlakazam closed 6 months ago

loveAlakazam commented 6 months ago

⛳️ 기능 구현 배경


백오피스 API 를 접근하기위한 관리자 계정 필요.

🧐 기능 구현 내용(Optional)


AdminGuard 생성 Admin 계정 생성 (user.account가 admin-{값} 형태로 되어있음)

관리자계정의 생성은 body에서 입력을 받으면됩니다.

📭 이슈 번호


15

loveAlakazam commented 6 months ago

@lullaaaby13

1. (리뷰반영) schema.prisma 변경

model User {
  id      Int     @id @default(autoincrement()) // PK
...
  role Role @default(USER) 
...  
}

enum Role {
  USER
  ADMIN
}

동성님이 이슈코멘트에서 언급해주셨듯이, 회원을 구분하도록 수정하였습니다. enum Role 을 추가하였고, default값으로는 일반유저 USER 로 해놨습니다.


2. (리뷰반영) 관리자 멤버는 일반유저기능 + 백오피스 기능 에 접근 가능하도록 수정

이슈코멘트에서도 언급해주셨듯이, 관리자 회원은 모든 API에 접근이 가능하도록 수정했습니다.

관리자와 일반유저의 차이점은 2가지 입니다. 권한 관리자 일반유저
account admin-{고유-계정문자열} k-{카카오유저고유값},
g-{구글유저고유값},
a-{애플유저고유값}
role ADMIN USER

3. Admin Guard 생성

context의 request.user을 파싱하여 role이 ADMIN 이면 통과하는 커스텀 가드를 생성했습니다. 추후 백오피스 컨트롤러에 적용하시면 됩니다!

import { Body, Controller, Param, ParseIntPipe, Patch, Post, UseGuards } from "@nestjs/common";
import { AdminGuard } from "src/guards/admin-auth.guard";

@UseGuards(AdminGuard)
@Controller("cities")
@ApiTags("백오피스 API - 도시")
export class BackOfficeCityController {
   ...
}

4. 관리자회원가입시 account가 중복된 유저있는지 체크

일반회원 연동로그인에서 해당계정이 트래즐DB에 존재하지않은경우에는 회원가입으로 DB에 신규회원 데이터로우를 생성

만일 기존에 있는 유저라면 로그인 절차를 밟는다.

관리자 회원의경우에는 소셜로그인 형태가 아니라서 account의 중복여부확인하여 이미 가입된 account가 존재하면 409 예외를 발생시키도록한다.


5. AdminGuard swagger 추가

커스텀 데코레이터 BeaererAuth(AdminGuard)로 대체

loveAlakazam commented 6 months ago

@lullaaaby13 AdminBearerAuth 를 생성함으로써 ADMIN인 유저만을 통과시키도록하는 가드 생성완료하였습니다!

그리고 새로운 이슈파서 관리자API 에서 미완성된 관리자 목록조회/정보조회/수정/삭제 내부로직 작성해놓겠습니다.

코멘트 확인하시고 아래 머지해주시면 감사하겠습니다!