feat(menu-guard): enhance menu guard logic to support nested menus
This commit is contained in:
parent
aa51742627
commit
d50bd40602
|
|
@ -1,6 +1,13 @@
|
||||||
import { inject } from '@angular/core';
|
import { inject } from '@angular/core';
|
||||||
import { CanActivateFn, Router } from '@angular/router';
|
import { CanActivateFn, Router } from '@angular/router';
|
||||||
import { TenantService } from '../services/tenant.service';
|
import { TenantService } from '../services/tenant.service';
|
||||||
|
import { Menu } from '../services/tenant.interface';
|
||||||
|
|
||||||
|
function containsMenu(menues: Menu[], menuCode: string): boolean {
|
||||||
|
return menues.some(
|
||||||
|
menu => menu.code === menuCode || containsMenu(menu.submenues ?? [], menuCode)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export const hasMenuGuard = (menuCode: string): CanActivateFn => {
|
export const hasMenuGuard = (menuCode: string): CanActivateFn => {
|
||||||
return () => {
|
return () => {
|
||||||
|
|
@ -13,7 +20,7 @@ export const hasMenuGuard = (menuCode: string): CanActivateFn => {
|
||||||
return router.createUrlTree(['/']);
|
return router.createUrlTree(['/']);
|
||||||
}
|
}
|
||||||
|
|
||||||
const hasMenu = tenant.menues?.some(menu => menu.code === menuCode) ?? false;
|
const hasMenu = containsMenu(tenant.menues ?? [], menuCode);
|
||||||
|
|
||||||
if (hasMenu) {
|
if (hasMenu) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,11 @@ export interface EventConfig {
|
||||||
export interface Menu {
|
export interface Menu {
|
||||||
id: number;
|
id: number;
|
||||||
code: string;
|
code: string;
|
||||||
|
parent_menu_code: string | null;
|
||||||
|
content_type: 'static' | 'dynamic';
|
||||||
route: string;
|
route: string;
|
||||||
|
static_content?: unknown;
|
||||||
|
submenues: Menu[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SocialMedia {
|
export interface SocialMedia {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue