假设我的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 => Domains =>回收
自定义管理
Access => Domains =>回收
我希望Access
成为第一个选定的(活动的),因为它是儿童列表中第一个可用的。
也许是自定义解析程序或后卫来决定是否在运行时说用户是Full
还是Custom
并从那里决定?
由于
答案 0 :(得分:0)
这听起来像路由保护的完美用例。例如,检查如何实现一个:
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]
},