import { FAS_DEFAULT_BUTTON_LIST } from './shared/const/fas-default-settings.const'; import { Component, inject, OnInit } from '@angular/core'; import { FASAdminService } from './fas-admin.service'; import { IFASAdminConfigInitializer, IFASButtonList, } from './shared/models/fas-admin-models'; import jwtDecode from 'jwt-decode'; @Component({ selector: 'lib-fas-admin', templateUrl: './fas-admin.component.html', styleUrl: './fas-admin.component.scss', }) export class FASAdminComponent implements OnInit { private fasAdminService = inject(FASAdminService); public inputData?: IFASAdminConfigInitializer; public visableDefaultButtonList: IFASButtonList[] = []; public specButtonList: IFASButtonList[] = []; ngOnInit() { this.inputData = this.fasAdminService.getFasAdminConfigValue(); this.visableDefaultButtonList = this.setSidebarButtons( this.inputData, FAS_DEFAULT_BUTTON_LIST, true ); if (this.inputData.specButtonList) this.specButtonList = this.setSidebarButtons( this.inputData, this.inputData.specButtonList, false ); } setSidebarButtons( configData: IFASAdminConfigInitializer, buttonList: IFASButtonList[], isDefaultList: boolean ): IFASButtonList[] { const token = localStorage.getItem('authToken'); if (!token) { console.error('FASAdminComponent: No token found.'); return isDefaultList ? buttonList : []; } // Decode token and extract user role const decodedToken: any = jwtDecode(token); const currentUserRole = decodedToken.Roles; const accessRules = configData.accessRules?.find((rule) => rule.role === currentUserRole) ?? null; if (!accessRules) { console.error( `FASAdminComponent: No access rules found for role: ${currentUserRole}` ); return []; } return buttonList.filter((button) => accessRules.access.includes(button.routerUrl) ); } }