Сделать первый дочерний маршрут активным на основе текущего списка доступных маршрутов - PullRequest
0 голосов
/ 22 мая 2018

Предположим, у меня есть следующая структура маршрутизации в моем приложении Angular:

children: [
    {
        component: Access,
        path: 'access'
    },
    {
        component: Authentication,
        path: 'authentication'
    },
    {
        component: Domains,
        path: 'domains'
    },
    {
        component: Recovery,
        path: 'recovery'
    },
    {
        path: '**',
        pathMatch: 'full',
        redirectTo: 'authentication'
    }
]

В приведенной выше реализации, поскольку мы используем путь по умолчанию authentication, он всегда будет тем, который выбран в данный момент.Однако у меня есть разные пользователи, которые имеют разные политики доступа в моем приложении, и некоторые не могут получить доступ к маршруту authentication.В этом случае первым маршрутом, с которым они должны быть представлены, является маршрут access.

Можно ли вместо жесткого кодирования этого authentication пути в качестве пути по умолчанию выбрать первый доступный в списке список?

Полный администратор

Аутентификация => Доступ => Домены => Восстановление

Настраиваемый администратор

Доступ => Домены => Восстановление

Я хочуAccess быть первым выбранным (активным), так как это первый доступный в списке детей.

Может быть, пользовательский распознаватель или охранник решит, будет ли во время выполнения указанный пользователь Full или Custom, и примет решение оттуда?

Спасибо

1 Ответ

0 голосов
/ 22 мая 2018

Это звучит как префект сценария использования для охраны маршрута.Посмотрите, например, здесь, как реализовать одно:

https://medium.com/@ryanchenkie_40935/angular-authentication-using-route-guards-bf7a4ca13ae3

Короче:

@Injectable()
export class AuthGuardService implements CanActivate {
  constructor(public auth: AuthService, public router: Router) {}
  canActivate(): boolean {
    if (!this.auth.isAuthenticated()) {
      this.router.navigate(['access']);
      return false;
    }
    return true;
  }
}

и в ваших маршрутах:

import { 
  AuthGuardService as AuthGuard 
} from './auth/auth-guard.service';
// ...
{
    component: Authentication,
    path: 'authentication',
    canActivate: [AuthGuard]
},
...