백엔드/NestJs

권한설정

STUFIT 2023. 7. 18. 11:40
반응형

nestjs에서는 데코레이터를 통한 접근 권한을 설정 할 수 있다.

이 때, 접근권한을 사용할 시에는 @useGuards() 라는 기본적인 가드 데코레이터를 사용할 수 있는데, 이 부분을 커스텀하여 어떠한 사용자가 어떤 api를 사용할 수 있는지 수정할 수 있다.

아래에는 예시 코드이다.

나는 @PermissionRole 이라는 데코레이터를 설정해서 해당 메뉴코드에 해당하는 유저만 해당 resolver를 접근할 수 있도록 설정했다.

그리고 query 또는 mutation 위에다만 데코레이터를 달면 해당 쿼리 및 뮤테이션만 권한이 설정되고, @Resolver 아래에 @UseGuars 또는 커스텀된 데코레이터를 작성하면 해당 resolver.ts의 모든 쿼리 및 뮤테이션에 권한설정이 지정된다.

const MENU_CODE = MenuCodeEnum.ADMIN_USER;

@Resolver(() => DepartmentPermissionType)
@PermissionRole({
  menuCode: MENU_CODE,
})

@Mutation(() => OperAdminResponseType, {
    name: 'ADMIN_departmentPermissionBatchPutMutation',
    description: '[운영관리자] 부서 권한 일괄 등록&수정',
  })
  async batchPutDepartmentPermission(
    @Args('ADMIN_departmentPermissionBatchPutMutationInput', {
      type: () => [DepartmentPermissionBatchPutMutationInput],
      nullable: false,
    })
    args: DepartmentPermissionBatchPutMutationInput[],
    @Context() context,
  ) {
    await this.operAdminDynamodbService.batchPutDepartmentPermission(args);

    await this.operAdminDynamodbService.createActivityLog(
      {
        actionName: '부서 권한',
        actionMethod: 'UPDATE',
        actionMenuCode: MENU_CODE,
        actionServiceCode: 'ADMIN',
        isActionResult: true,
        response: JSON.stringify({ result: true }),
      },
      context,
    );

    return { result: true };
  }
반응형

'백엔드 > NestJs' 카테고리의 다른 글

[nestjs] PickType,OmitType, PartialType  (0) 2023.09.25
리졸브필드(resolveField)  (0) 2023.07.31
[nestjs] new DataLoader  (0) 2023.07.02
[nestjs] nx 모노레포??  (0) 2023.06.25
[nestjs 강의] graphql & typeorm part2~3  (1) 2023.06.18