[英]Get the value returned by canActivate Method in Angular2 Route in a component?
[英]Angular 4 - CanActivate check component being route
在CanActivate中,有一種方法可以檢查用戶正在路由/請求哪個組件以進行身份驗證。 因此,與其像我在下面所做的那樣檢查URL,不如做if(route.component instanceof MyComponent)之類的事情。
我正在實現基於角色的訪問,並具有將每個角色配置為對不同組件具有不同訪問級別(視圖,編輯等)的能力。 因此,我認為最簡單的方法是獲取當前組件的路由,然后檢查該組件的訪問級別,而不是為每個組件創建不同的AuthGard。
我試圖通過檢查URL來做到這一點,但是當URL中包含參數時它的大小寫問題。
canActivate(route: ActivatedRouteSnapshot,
state: RouterStateSnapshot) {
let ac = this.auth.getAccessConfig();
switch (state.url) {
case '/site':
return ac.some(x => x.moduleID == AccessModulesEnum.Site && x.permissionID == AccessPermissionEnum.View);
case '/site/new':
return ac.some(x => x.moduleID == AccessModulesEnum.Site && x.permissionID == AccessPermissionEnum.Modify);
case '/site/:id': ***//this doesn't work as :id could be anything***
return ac.some(x => x.moduleID == AccessModulesEnum.SiteDetail && x.permissionID == AccessPermissionEnum.View);
case '/reports/milestone':
return ac.some(x => x.moduleID == AccessModulesEnum.MilestoneReport && x.permissionID == AccessPermissionEnum.View);
case '/reports/audit':
return ac.some(x => x.moduleID == AccessModulesEnum.AuditReport && x.permissionID == AccessPermissionEnum.View);
case '/reports/schedule':
return ac.some(x => x.moduleID == AccessModulesEnum.ReportScheduler && x.permissionID == AccessPermissionEnum.View);
case '/importer':
return ac.some(x => x.moduleID == AccessModulesEnum.Import && x.permissionID == AccessPermissionEnum.View);
case '/reports':
return ac.some(x => x.moduleID == AccessModulesEnum.SiteReport && x.permissionID == AccessPermissionEnum.View);
case '/admin/users':
return ac.some(x => x.moduleID == AccessModulesEnum.User && x.permissionID == AccessPermissionEnum.View);
case '/admin/tables':
return ac.some(x => x.moduleID == AccessModulesEnum.ReferenceTable && x.permissionID == AccessPermissionEnum.View);
default:
return false;
}
});
}
另一個問題:是否可以使用來自Routes配置的參數調用AuthGard,例如{path:'site /:id',component:SiteDetail,canActivate:[(callCustomeAuthGard('SiteDetailComponent')]
謝謝
已使用route.routeConfig.path而不是url(類似於“ site /:id”而不是“ site / 2”)來檢查路由路徑,從而找到了解決上述問題的解決方案。
但是,是否希望有更好的方法來進行如上所述的基於角色的身份驗證。
您是否嘗試過route.component
? 根據docs ,其中應包含要路由到的組件類。
如果是這樣,則激活保護人員可以詢問組件類它需要哪些權限。
您的ActivatedRouteSnapshot(在canActivate函數中使用的route參數)包含該組件。
因此,您可以使用:
if (route.component === MyComponent) {
// Do something
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.