What error code should I use when I return no access

11 Views Asked by At

How can I set dynamic statuscode for each error and what error code should I use when a user has no access ?

here is my code:

import * as Sentry from '@sentry/node';
import { Request, Response } from 'express';
import { INTERNAL_ERROR } from '../../utils/constants.js';
import { createAdminAccountDB } from '../../db/auth/createAdminAccount.db.js';

export const createAdminAccount = async (req: Request, res: Response) => {
  try {
    if(!req.appData.isAdmin) {
      throw new Error('No access');
    }

    if(!req.userData.roles) {
      throw new Error('No access.');
    }

    if(!req.userData.roles.includes('CREATE_ADMIN_USER')) {
      throw new Error('No Access. Role not valid.');
    }

    const result = await createAdminAccountDB(req.body);

    if(!result) {
      throw new Error(result ?? 'Database error.');
    } else {
      return res.status(200).json(result);
    }
  } catch(e) {
    Sentry.captureException(e);
    console.log(e);
    if(e instanceof Error) {
      return res.status(500).json({
        message: e.message,
        success: false
      });
    } else if(typeof e === 'string') {
      return res.status(500).json({
        message: e,
        success: false
      });
    } else {
      return res.status(500).json({
        message: INTERNAL_ERROR,
        success: false
      });
    }
  }
};

At my catch error I set the statuscode to 500 but how can I change the statuscode when I throw a access error ?

0

There are 0 best solutions below