dada tal plantilla
<a *ngIf="canAccess()" routerLink="/adminUsers">...</a> <a *ngIf="canAccess()" routerLink="/link2">...</a> <a *ngIf="canAccess()" routerLink="/otherlink">...</a> <a *ngIf="canAccess()" routerLink="/somthingelse">...</a>y una función:
canAccess() { ...como lo consigo
Gracias
Actualiza tu plantilla
<a *ngIf="canAccess($event)" routerLink="/adminUsers">...</a>y tu componente
canAccess(event){ console.log(event.currentTarget); console.log(event.currentTarget.getAttribute("routerlink")); .. }Puede que necesites:
Coloque los que necesita en el constructor y llame a sus métodos en su canAccess() .
Además, podría proteger su ruta (desde routerLink ) con un Guard .
Mi solución fue crear una directiva y su componente asociado, así que solo le doy el módulo al que el usuario quiere acceder
esa directiva pregunta a un servicio si el usuario ha iniciado sesión y puede acceder a ese enlace
en caso afirmativo, el enlace se reemplaza con el componente
aquí hay un ejemplo de cómo insertar un componente de forma dinámica (que no contiene la parte de autorización)
import { Directive, Input, ComponentFactoryResolver,ViewContainerRef } from '@angular/core'; import { MenuItemComponent } from './menuItem.component'; @Directive({ selector: '[menuItem]' }) export class MenuItemDirective { constructor( private componentFactoryResolver: ComponentFactoryResolver, private viewContainer: ViewContainerRef) {} @Input() set menuItem(_link: string) { if(some sort of condition depending on a auth service) { const factory = this.componentFactoryResolver.resolveComponentFactory(MenuItemComponent); const menuItemComponentRef = this.viewContainer.createComponent(factory); menuItemComponentRef.changeDetectorRef.detectChanges(); } else this.viewContainer.clear(); } }podría ser excesivo, pero al final uso
<a *menuItem="dashBoard"></a>en vez de
<a class="menuItemA menuRouterLinkA" routerLink="/dashBoard" routerLinkActive="menuCurrentLinkA" >{{ "DashBoard" }}</a>y se trata de características/página/módulos... autorización de acceso :-)
Hurra