clean routes
This commit is contained in:
72
apps/website/lib/auth/RouteAccessPolicy.ts
Normal file
72
apps/website/lib/auth/RouteAccessPolicy.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import { RouteCatalog } from './RouteCatalog';
|
||||
|
||||
/**
|
||||
* RouteAccessPolicy - Determines access requirements for routes
|
||||
*
|
||||
* Responsibilities:
|
||||
* - Check if a route is public
|
||||
* - Check if a route is an auth page
|
||||
* - Determine required roles for a route
|
||||
* - Get home path for a specific role
|
||||
*
|
||||
* Design: Uses ONLY RouteCatalog patterns/matchers, no hardcoded arrays/strings
|
||||
*/
|
||||
export class RouteAccessPolicy {
|
||||
constructor(private catalog: RouteCatalog) {}
|
||||
|
||||
/**
|
||||
* Check if a logical pathname is publicly accessible
|
||||
* @param logicalPathname - The path to check
|
||||
* @returns true if the route is public (no auth required)
|
||||
*/
|
||||
isPublic(logicalPathname: string): boolean {
|
||||
// Get the route ID for this path
|
||||
const routeId = this.catalog.getRouteIdByPath(logicalPathname);
|
||||
|
||||
if (!routeId) {
|
||||
// No route found, not public
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if this route ID is in the public routes list
|
||||
const publicRouteIds = this.catalog.listPublicRoutes();
|
||||
return publicRouteIds.includes(routeId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a logical pathname is an auth page
|
||||
* @param logicalPathname - The path to check
|
||||
* @returns true if the route is an auth page
|
||||
*/
|
||||
isAuthPage(logicalPathname: string): boolean {
|
||||
return this.catalog.isAuthPage(logicalPathname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get required roles for a logical pathname
|
||||
* @param logicalPathname - The path to check
|
||||
* @returns Array of required roles, or null if no specific role required
|
||||
*/
|
||||
requiredRoles(logicalPathname: string): string[] | null {
|
||||
// Use catalog's role-based access method
|
||||
return this.catalog.getRequiredRoles(logicalPathname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the home path for a specific role
|
||||
* @param role - The role name
|
||||
* @returns The logical path for that role's home page
|
||||
*/
|
||||
roleHome(role: string): string {
|
||||
return this.catalog.getRoleHome(role);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the route ID for a specific role's home page
|
||||
* @param role - The role name
|
||||
* @returns The route ID for that role's home page
|
||||
*/
|
||||
roleHomeRouteId(role: string): string {
|
||||
return this.catalog.getRoleHomeRouteId(role);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user