@@ -8,14 +8,37 @@ export const API_ROUTES = {
88
99export type RouteName = keyof typeof API_ROUTES ;
1010export type Route = ( typeof API_ROUTES ) [ RouteName ] ;
11+ export type Routes = Route [ ] ;
1112
1213export const roles = [ "admin" , "user" , "owner" ] as const ;
1314export type Claim = ( typeof roles ) [ number ] ;
1415
1516export const permissions = new Map < Route , Claim [ ] > ( ) ;
17+ export type PermissionsMap = typeof permissions ;
1618
1719permissions . set ( API_ROUTES . root , [ ] ) ;
1820permissions . set ( API_ROUTES . verifyAuthToken , [ "user" ] ) ;
1921permissions . set ( API_ROUTES . users , [ "admin" ] ) ;
2022permissions . set ( API_ROUTES . userById , [ "owner" ] ) ;
2123permissions . set ( API_ROUTES . setUsersPermissions , [ "admin" ] ) ;
24+
25+ /**
26+ * This validates that permissions are set for all routes
27+ * in the permissions map.
28+ *
29+ */
30+ export const hasRoutesWithNoPermissionsSet = ( routes : Routes , permissions : PermissionsMap ) : boolean => {
31+ const permissionRoutes = [ ...permissions . keys ( ) ] ;
32+
33+ const hasInvalidRoute = routes . some ( ( route ) => {
34+ return ! permissionRoutes . includes ( route ) ;
35+ } ) ;
36+
37+ return hasInvalidRoute ;
38+ } ;
39+
40+ const hasInvalidRoute = hasRoutesWithNoPermissionsSet ( Object . values ( API_ROUTES ) , permissions ) ;
41+
42+ if ( hasInvalidRoute ) {
43+ throw new Error ( "There are routes without permissions set." ) ;
44+ }
0 commit comments