如何对授权逻辑不同的不同路由使用相同的路由保护
How to use same route guard for different routes that differ in authorization logic
对于我的 Angular 6 项目,我有一个可以激活 AuthGuard 来加载组件 A。
我想知道是否可以对组件 B 使用相同的 AuthGuard,它的授权逻辑与组件 A 完全相反?
下面说一下授权组件A的逻辑
- 从 API 服务 HTTP GET 调用获取摘要项目
- 迭代项目并检查激活状态。如果激活状态为 'ACTIVE' return true
- 如果没有摘要项目 returned 并且激活状态不是 'ACTIVE',return false 并且只显示登录页面。
我的要求是负载组件B和上面正好相反
- 显示组件 B 如果没有 returned 摘要项并且激活状态不是 'ACTIVE',则不加载组件,只显示登录页面
- 如果存在摘要项且激活状态为 'ACTIVE' 则仅显示登录页面。
组件 A 的现有 auth.guard.ts
:
export class AuthGuard implements CanActivate {
canActivate(next: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean>
{
return this.checkAuthorization();
}
checkAuthorization():Observable<boolean>{
let hasActiveSummary:boolean=false;
return this.apiService.getSummary(url)
.pipe(
map((data:any) => {
console.log("Summary list:", data);
if(data.length > 0){
for (let i=0; i< data.length; i++) {
if(data[i].activationStatus ==='ACTIVE') {
hasActiveSummary=true;
return true;
}
}
}
if(!hasActiveSummary){
this.router.navigate(['/login']);
return false;
}
})
)
}
我想知道我可以使用相同的身份验证守卫吗?如果可以,怎么做?
canActivate
方法有 state
属性 类型 RouterStateSnapshot。您可以根据 state.url
做出决定,而只是 return 根据您到达的路线 hasActiveSummary
的倒数。
对于我的 Angular 6 项目,我有一个可以激活 AuthGuard 来加载组件 A。
我想知道是否可以对组件 B 使用相同的 AuthGuard,它的授权逻辑与组件 A 完全相反?
下面说一下授权组件A的逻辑
- 从 API 服务 HTTP GET 调用获取摘要项目
- 迭代项目并检查激活状态。如果激活状态为 'ACTIVE' return true
- 如果没有摘要项目 returned 并且激活状态不是 'ACTIVE',return false 并且只显示登录页面。
我的要求是负载组件B和上面正好相反
- 显示组件 B 如果没有 returned 摘要项并且激活状态不是 'ACTIVE',则不加载组件,只显示登录页面
- 如果存在摘要项且激活状态为 'ACTIVE' 则仅显示登录页面。
组件 A 的现有 auth.guard.ts
:
export class AuthGuard implements CanActivate {
canActivate(next: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean>
{
return this.checkAuthorization();
}
checkAuthorization():Observable<boolean>{
let hasActiveSummary:boolean=false;
return this.apiService.getSummary(url)
.pipe(
map((data:any) => {
console.log("Summary list:", data);
if(data.length > 0){
for (let i=0; i< data.length; i++) {
if(data[i].activationStatus ==='ACTIVE') {
hasActiveSummary=true;
return true;
}
}
}
if(!hasActiveSummary){
this.router.navigate(['/login']);
return false;
}
})
)
}
我想知道我可以使用相同的身份验证守卫吗?如果可以,怎么做?
canActivate
方法有 state
属性 类型 RouterStateSnapshot。您可以根据 state.url
做出决定,而只是 return 根据您到达的路线 hasActiveSummary
的倒数。