@@ -6,13 +6,13 @@ import {
66 rankUserRole ,
77 User ,
88 RoleEnum ,
9- isHead ,
109 UserSecureSettings ,
1110 UserScheduleSettings ,
1211 AuthenticatedUser ,
1312 AvailabilityCreateArgs ,
1413 UserWithScheduleSettings ,
15- ProjectOverview
14+ ProjectOverview ,
15+ isAtLeastRank
1616} from 'shared' ;
1717import prisma from '../prisma/prisma.js' ;
1818import { AccessDeniedException , HttpException , NotFoundException } from '../utils/errors.utils.js' ;
@@ -393,25 +393,16 @@ export default class UsersService {
393393 const userRankedRole = rankUserRole ( userRole ) ;
394394 const targetUserRankedRole = rankUserRole ( targetUserRole ) ;
395395
396- const isLeadershipPromotingGuestToMember =
397- userRole === RoleEnum . LEADERSHIP && targetUserRole === RoleEnum . GUEST && role === RoleEnum . MEMBER ;
398-
399- if ( ! isLeadershipPromotingGuestToMember ) {
400- if ( ! isHead ( userRole ) ) {
401- throw new AccessDeniedException ( 'Guests, members, and leadership cannot update user roles!' ) ;
402- }
403-
404- if ( targetUserRankedRole >= userRankedRole ) {
405- throw new AccessDeniedException ( 'Cannot change the role of a user with an equal or higher role than you' ) ;
406- }
396+ if ( ! isAtLeastRank ( RoleEnum . LEADERSHIP , userRole ) ) {
397+ throw new AccessDeniedException ( 'Guests and members cannot update user roles!' ) ;
398+ }
407399
408- if ( userRole === RoleEnum . HEAD && rankUserRole ( role ) >= userRankedRole ) {
409- throw new AccessDeniedException ( 'Heads can only promote to leadership or below ' ) ;
410- }
400+ if ( targetUserRankedRole >= userRankedRole ) {
401+ throw new AccessDeniedException ( 'Cannot change the role of a user with an equal or higher role than you ' ) ;
402+ }
411403
412- if ( rankUserRole ( role ) > userRankedRole ) {
413- throw new AccessDeniedException ( 'Cannot promote user to a higher role than yourself' ) ;
414- }
404+ if ( rankUserRole ( role ) >= userRankedRole && role !== RoleEnum . APP_ADMIN ) {
405+ throw new AccessDeniedException ( 'Cannot promote someone to your own role or higher' ) ;
415406 }
416407
417408 await prisma . role . upsert ( {
0 commit comments