Winkel-2 aktuelle route in der Wache
Ich habe eine AccessGuard Klasse in meinem Projekt, die seiner Arbeit ist es zu ermitteln, ob der Benutzer kann den Zugang zu der route oder nicht. Ich benutzte die router.url
um die aktuelle route, aber die url gibt die route vor der navigation, um die neue route, so wie ich bin, in das Benutzer-route und ich auf die Kandidaten, die route also, die url, die der Benutzer zurück, anstatt die Kandidaten, die ich will, zu überprüfen Zugriff auf die route
dies ist meine route Datei:
const routes:Routes = [
{
path:'',
component:PanelComponent,
canActivate:[AuthGuard,AccessGuard],
canActivateChild:[AuthGuard,AccessGuard],
children:[
{
path:'dashboard',
component:DashboardComponent
},
{
path:'users',
component:UsersComponent
},
{
path:'users/:id',
component:ShowUserComponent
},
{
path:'candidates',
component:CandidatesComponent
},
{
path:'permissions',
component:PermissionsComponent
},
{
path:'holidays',
component:HolidaysComponent
},
{
path:'candidate/:id',
component:CandidateComponent
},
{
path:'salary/create',
component:InsertSalaryComponent
},
{
path:'document/create',
component:InsertDocumentComponent
},
{
path:'leave/create',
component:InsertLeaveComponent
}
]
}
];
und das ist mein Zugang guard:
permissions;
currentRoute;
constructor(private authService:AuthService,private router:Router){
this.permissions = this.authService.getPermissions();
}
canActivate(){
return this.checkHavePermission();
}
canActivateChild(){
console.log(this.router.url);
return this.checkHavePermission();
}
private checkHavePermission(){
switch (this.router.url) {
case "/panel/users":
return this.getPermission('user.view');
case '/panel/dashboard':
return true;
case '/panel/candidates':
return this.getPermission('candidate.view');
default:
return true;
}
}
getPermission(perm){
for(var i=0;i<this.permissions.length;i++){
if(this.permissions[i].name == perm ){
return true;
}
}
return false;
}
InformationsquelleAutor Hossein Ahmadi | 2016-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Parameter der Methode zu sehen, die Ziel-route:
Sie sollten nicht entfernen Sie die ActivatedRouteSnapshot von Parametern, auch wenn Sie nur wollen, verwenden Sie die RouterStateSnapshot parameter. Die Parameter werden definiert, indem position. Der erste parameter ist immer der ActivatedRouteSnapshot und dessen url-Feld ist ein array. Der zweite parameter ist immer die RouterStateSnapshot-parameter und die url-Feld ist ein string. Hoffe, es hilft.
Achtung: wenn Ihre url hat queryparams, die Sie haben könnten, um dies zu tun:
console.log(state.url.substring(0, state.url.indexOf("?")));
InformationsquelleAutor Guilherme Meireles
diesem konnte dir helfen:
Import ActivatedRouteSnapshot und RouterStateSnapshot:
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';
Signatur in der canActivate:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable {}
Überprüfen Sie die Staatliche:
console.log("route-access",state);
Ihre Wache-Datei würde wie folgt Aussehen:
InformationsquelleAutor eberlast
Aktuelle URL zurückgegeben werden können aus RouterStateSnapshot, wie unten gezeigt,
InformationsquelleAutor Chandan Y S