Angular2路由中的警衛按其提供的順序運行。 但是在有守衛者的情況下,即使第一個守衛是真實的,角度也會忽略它,並且只應用第二守衛的可觀察結果。如果至少有一名警衛處於活動狀態,則轉到路線
我該如何解決這個問題?
const mainRoutes: Routes = [
{
path: 'app',
component:MainComponent,
canActivate:[AuthGuard],
children:[
{ path: 'dashboard', component: DashboardComponent },
{ path: 'protectedRoute', component: ProtectedRouteComponent, canActivate:[Admin1Guard,Admin2Guard] }
]}
];
第1保護:
canActivate() :Observable<boolean>{
return this.authService.getUser().map(res=>{
if(res.user.role=="admin1")
return true;
}).take(1);
}
}
第二後衛:
canActivate() :Observable<boolean>{
return this.authService.getUser().map(res=>{
if(res.user.role=="admin2")
return true;
}).take(1);
}
}
聽起來像是正常的行爲。如果**至少有一個警衛返回false,那麼'canActivate'屬性將阻止用戶訪問該路線。所以在你的情況下,如果'Admin1Guard'返回true並且'Admin2Guard'返回false,則不應該授予訪問權限。您顯示的代碼是真實的代碼嗎?爲什麼你需要兩個可觀測物來測試同一個屬性? – AngularChef
嗯,如果其中至少有一個是真的(守衛之間的OR關係),我想要路由。 我在應用程序中有很多角色,每個角色都可以訪問某些部分(當然也有部分可以被許多角色訪問),這就是爲什麼我爲每個角色創建了一個警衛。 有沒有更好的方法來做到這一點? –