Files
carmanagement/apps/dashboard/src/lib/dashboardRoutePolicies.ts
T
root f22e0d45e1
Build & Deploy / Build & Push Docker Image (push) Successful in 7m57s
Test / Type Check (all packages) (push) Successful in 4m27s
Build & Deploy / Deploy to VPS (push) Successful in 7s
Test / API Unit Tests (push) Failing after 3m2s
Test / Homepage Unit Tests (push) Successful in 4m3s
Test / Storefront Unit Tests (push) Successful in 3m32s
Test / Admin Unit Tests (push) Successful in 3m27s
Test / Dashboard Unit Tests (push) Successful in 3m3s
Test / API Integration Tests (push) Failing after 3m53s
fix subscription page
2026-06-29 23:15:55 -04:00

61 lines
2.0 KiB
TypeScript

import { toDashboardAppPath } from './dashboardPaths'
export type DashboardRole = 'OWNER' | 'MANAGER' | 'AGENT'
export type DashboardRoutePolicy = {
authenticationRequired: boolean
allowedRoles: DashboardRole[] | null
subscriptionRequired: boolean
menuRegistrationRequired: boolean
billingRecoveryRoute?: boolean
}
export const OWNER_ONLY_BILLING_RECOVERY_POLICY: DashboardRoutePolicy = {
authenticationRequired: true,
allowedRoles: ['OWNER'],
subscriptionRequired: false,
menuRegistrationRequired: false,
billingRecoveryRoute: true,
}
export const DASHBOARD_FEATURE_POLICY: DashboardRoutePolicy = {
authenticationRequired: true,
allowedRoles: null,
subscriptionRequired: true,
menuRegistrationRequired: true,
}
export const dashboardRoutePolicies: Record<string, DashboardRoutePolicy> = {
'/': {
authenticationRequired: true,
allowedRoles: null,
subscriptionRequired: false,
menuRegistrationRequired: false,
},
'/subscription': OWNER_ONLY_BILLING_RECOVERY_POLICY,
'/subscription/success': OWNER_ONLY_BILLING_RECOVERY_POLICY,
'/subscription/cancel': OWNER_ONLY_BILLING_RECOVERY_POLICY,
}
export function resolveDashboardRoutePolicy(pathname: string): DashboardRoutePolicy {
const currentPath = toDashboardAppPath(pathname)
const matchingRoute = Object.keys(dashboardRoutePolicies)
.sort((a, b) => b.length - a.length)
.find((route) => {
if (route === '/') return currentPath === '/'
return currentPath === route || currentPath.startsWith(`${route}/`)
})
return matchingRoute ? dashboardRoutePolicies[matchingRoute] : DASHBOARD_FEATURE_POLICY
}
export function roleCanAccessPolicy(role: string | null | undefined, policy: DashboardRoutePolicy): boolean {
if (!policy.allowedRoles) return true
return Boolean(role && policy.allowedRoles.includes(role as DashboardRole))
}
export function getDashboardFallbackRoute(role: string | null | undefined): string {
if (role === 'OWNER' || role === 'MANAGER' || role === 'AGENT') return '/'
return '/'
}