Skip to content

Commit d4ef909

Browse files
committed
#1448: added helper function for validating user rank to make things more consise
1 parent 77339a2 commit d4ef909

3 files changed

Lines changed: 14 additions & 8 deletions

File tree

src/backend/src/services/reimbursement-requests.services.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
} from 'shared';
2222
import prisma from '../prisma/prisma';
2323
import {
24+
isUserAdminOrOnFinance,
2425
removeDeletedReceiptPictures,
2526
updateReimbursementProducts,
2627
validateReimbursementProducts,
@@ -702,12 +703,7 @@ export default class ReimbursementRequestService {
702703
* @returns the updated vendor
703704
*/
704705
static async editVendors(name: string, vendorId: string, submitter: User) {
705-
if (!isAdmin(submitter.role)) {
706-
await validateUserIsPartOfFinanceTeam(submitter);
707-
708-
if (!isHead(submitter.role))
709-
throw new AccessDeniedAdminOnlyException('only Admins and Finance Heads can edit vendors');
710-
}
706+
await isUserAdminOrOnFinance(submitter);
711707

712708
const vendorUniqueName = await prisma.vendor.findUnique({
713709
where: { name }

src/backend/src/utils/reimbursement-requests.utils.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* See the LICENSE file in the repository root folder for details.
44
*/
55

6-
import { ReimbursementProductCreateArgs, ReimbursementReceiptCreateArgs, WbsNumber, wbsPipe } from 'shared';
6+
import { ReimbursementProductCreateArgs, ReimbursementReceiptCreateArgs, WbsNumber, isAdmin, wbsPipe } from 'shared';
77
import prisma from '../prisma/prisma';
88
import { AccessDeniedException, DeletedException, HttpException, NotFoundException } from './errors.utils';
99
import { Prisma, Receipt, Reimbursement_Product, Team, User } from '@prisma/client';
@@ -233,3 +233,13 @@ export const isAuthUserHeadOfFinance = (user: Prisma.UserGetPayload<typeof authU
233233
const isTeamIdInList = (teamId: string, teamsList: Team[]) => {
234234
return teamsList.map((team) => team.teamId).includes(teamId);
235235
};
236+
237+
export const isUserAdminOrOnFinance = async (submitter: User) => {
238+
try {
239+
await validateUserIsPartOfFinanceTeam(submitter);
240+
} catch (error) {
241+
if (!isAdmin(submitter.role)) {
242+
throw new AccessDeniedException('Only Admins, Finance Team Leads, or Heads can edit vendors');
243+
}
244+
}
245+
};

src/backend/tests/reimbursement-requests.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ describe('Reimbursement Requests', () => {
631631
test('Throws error if user isnt an admin or lead/head of the finance', async () => {
632632
await expect(
633633
ReimbursementRequestService.editVendors('I Love Benny', GiveMeMyMoney.vendorId, wonderwoman)
634-
).rejects.toThrow(new AccessDeniedException('You are not a member of the finance team!'));
634+
).rejects.toThrow(new AccessDeniedException('Only Admins, Finance Team Leads, or Heads can edit vendors'));
635635
});
636636

637637
test('Throws error if the vendor name already exists', async () => {

0 commit comments

Comments
 (0)