Mi aplicación permite el acceso a los contenidos en función de los roles de los usuarios. Escribí un Router Guard para cada función. Algunos contenidos permiten el acceso para role1 o role2 o role3. ¿Cómo debo escribir esa declaración canActivate en el archivo feature-routing.module.ts? Según tengo entendido, si escribo
canActivate:[Role1Guard, Role2Guard, Role3Guard]El acceso será denegado si alguno de los guardias devuelve falso. Pero en mi caso, debería permitir el acceso si alguno de los guardias devuelve la verdad. ¿Cómo hacerlo? ¡Muchas gracias de antemano!
Lo que podemos hacer en este caso es crear un Master Guard que activará los protectores de la aplicación según nuestros requisitos.
Consulte esta respuesta para comprender el enfoque.
Suponiendo que haya revisado el enlace anterior, el enfoque en este caso podría ser tan simple como modificar la propiedad de data en la clase Route .
Algo como esto -
{ path: "view2", component: View2Component, //attach master guard here canActivate: [MasterGuard], //this is the data object which will be used by //masteer guard to execute guard1, guard 2, guard 3 & guard 4 data: { trigger: { operator: "OR", guards: [ GUARDS.GUARD1, GUARDS.GUARD2, GUARDS.GUARD3, GUARDS.GUARD4 ] } } } Y luego use la bandera del operator para disparar a todos los guardias en consecuencia.
Espero que esto ayude :)
Podrías escribir OrGuard , algo como:
class OrGuard() { guards: any[]; constructor(...guards) { this.guards = guards } canActivate() { return this.guards.some(Boolean); } }y usarlo así:
canActivate:[new OrGuard(Role1Guard, Role2Guard, Role3Guard)]...solo una idea, la implementación real podría ser diferente, no lo intenté (;