Files
carmanagement/apps/dashboard/src/lib/dashboardRoutePolicies.ts
T
root 2b422ca197
Build & Push / Pipeline Tests (push) Failing after 1m14s
Build & Push / Build & Push Docker Image (push) Has been skipped
Test / Type Check (all packages) (push) Successful in 53s
Test / API Unit Tests (push) Failing after 50s
Test / Homepage Unit Tests (push) Successful in 45s
Test / Carplace Unit Tests (push) Successful in 44s
Test / Admin Unit Tests (push) Successful in 42s
Test / Dashboard Unit Tests (push) Successful in 43s
Test / API Integration Tests (push) Successful in 1m4s
fix search feature
2026-07-26 01:18:05 -04:00

67 lines
2.1 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,
'/search': {
authenticationRequired: true,
allowedRoles: null,
subscriptionRequired: true,
menuRegistrationRequired: false,
},
}
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 '/'
}