6c38cd0019
- Cascade delete on all entities (student, module, UE, user, role, promotion) - Fix Response body reuse bug (factory functions instead of constants) - Student note viewing via CAS uid (strip non-digit prefix) - Fix middleware page visibility for students in LOCAL mode - Import result popup component (shared across all import pages) - Fix student import to use numEtud from Excel - Bulk student selection with promo change and delete - Move UE/UE-Module API and pages from notes to admin module - Move promotions page from students to admin module - Multi-year maquette import with per-year promo selection - Inline promo creation in maquette import - Static Excel templates (students, notes, maquette) - Fix XLSX export using blob download instead of writeFile - Allow students to read modules list (GET /modules)
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { FreshContext, MiddlewareHandler } from "$fresh/server.ts";
|
|
import {
|
|
AppProperties,
|
|
AuthenticatedState,
|
|
} from "$root/defaults/interfaces.ts";
|
|
|
|
export const handler: MiddlewareHandler<AuthenticatedState>[] = [
|
|
/**
|
|
* Get all available pages for current user.
|
|
* @param request The HTTP incomming request.
|
|
* @param context The Fresh context object with custom `AuthenticatedState`.
|
|
* @returns The response from the next middleware.
|
|
*/
|
|
async function getAllAvailablePages(
|
|
request: Request,
|
|
context: FreshContext<AuthenticatedState>,
|
|
): Promise<Response> {
|
|
const pathname = new URL(request.url).pathname;
|
|
const currentApp = pathname.split("/")[1];
|
|
const properties: AppProperties = (await import(
|
|
`./${currentApp}/(_props)/props.ts`
|
|
)).default;
|
|
|
|
context.state.availablePages = { ...properties.pages };
|
|
const isStudent =
|
|
context.state.session.eduPersonPrimaryAffiliation === "student";
|
|
const isLocal = Deno.env.get("LOCAL") === "true";
|
|
|
|
if (isStudent) {
|
|
// Students only see studentOnly pages (+ non-restricted pages)
|
|
properties.adminOnly.forEach((page) =>
|
|
delete context.state.availablePages[page]
|
|
);
|
|
} else if (isLocal) {
|
|
// In local mode, employees see all pages (admin + student)
|
|
} else {
|
|
// In prod, employees don't see studentOnly pages
|
|
properties.studentOnly?.forEach((page) =>
|
|
delete context.state.availablePages[page]
|
|
);
|
|
}
|
|
|
|
return await context.next();
|
|
},
|
|
];
|