frontend skeleton

This commit is contained in:
tw-blue
2025-11-29 17:47:36 +01:00
parent be154c91dc
commit a9fb52fd4d
30 changed files with 433 additions and 377 deletions
+49 -2
View File
@@ -1,3 +1,50 @@
import { Routes } from '@angular/router';
import { inject } from '@angular/core';
import {
ActivatedRouteSnapshot,
CanActivateFn,
Router,
RouterStateSnapshot,
Routes,
UrlTree,
} from '@angular/router';
import { AuthGuardData, createAuthGuard } from 'keycloak-angular';
import { Login } from './components/login/login';
import { MissingPage } from './components/missing-page/missing-page';
export const routes: Routes = [];
export const roles = {
UserAdmin: 'useradmin',
MemberAdmin: 'memberadmin',
};
function requireRoles(roles: string[], any: boolean = false): CanActivateFn {
const isAllowed = async (
_: ActivatedRouteSnapshot,
__: RouterStateSnapshot,
authData: AuthGuardData
): Promise<boolean | UrlTree> => {
const { authenticated, grantedRoles } = authData;
const allRoles = Object.values(grantedRoles).flat();
const hasRequiredRoles = any
? roles.some((role) => allRoles.includes(role))
: roles.every((role) => allRoles.includes(role));
if (authenticated && hasRequiredRoles) {
return true;
}
const router = inject(Router);
return router.parseUrl('/login');
};
return createAuthGuard<CanActivateFn>(isAllowed);
}
export const routes: Routes = [
{ path: 'login', component: Login },
{
path: '',
loadComponent: () => import('./components/home/home').then((mod) => mod.Home),
canActivate: [requireRoles([roles.MemberAdmin, roles.UserAdmin], true)],
},
{ path: '**', component: MissingPage },
];