feat: add Master Admin application functionality
This commit is contained in:
@@ -1,15 +1,18 @@
|
||||
import { Injectable, signal } from '@angular/core';
|
||||
import { Injectable, inject, signal } from '@angular/core';
|
||||
import { Observable, of, tap } from 'rxjs';
|
||||
import { MenuContext } from '../../models/context/context.model';
|
||||
import { SAAS_MENU_DATA } from './menu.data';
|
||||
import { Menu } from '../../../core/services/common/nav.service';
|
||||
import { TokenStorageService } from '../auth/token-storage.service';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class MenuService {
|
||||
private readonly tokenStorage = inject(TokenStorageService);
|
||||
readonly menuContext = signal<MenuContext | null>(null);
|
||||
|
||||
loadMenu(): Observable<MenuContext> {
|
||||
const context = this.cloneMenuContext(SAAS_MENU_DATA);
|
||||
context.items = this.filterAuthorizedItems(context.items);
|
||||
return of(context).pipe(
|
||||
tap((menuContext) => {
|
||||
this.menuContext.set(menuContext);
|
||||
@@ -39,4 +42,15 @@ export class MenuService {
|
||||
private cloneMenuItems(items: Menu[]): Menu[] {
|
||||
return JSON.parse(JSON.stringify(items)) as Menu[];
|
||||
}
|
||||
}
|
||||
|
||||
private filterAuthorizedItems(items: Menu[]): Menu[] {
|
||||
const isSuperAdmin = (this.tokenStorage.getUser()?.roles ?? []).includes('super_admin');
|
||||
return items
|
||||
.filter(item => isSuperAdmin || item.path !== '/users')
|
||||
.map(item => ({
|
||||
...item,
|
||||
children: item.children ? this.filterAuthorizedItems(item.children) : item.children,
|
||||
children2: item.children2 ? this.filterAuthorizedItems(item.children2) : item.children2
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user