import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { Observable } from 'rxjs';
import { AllService } from '../services/all.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuardService implements CanActivate {
constructor(private all: AllService, private _router: Router) {
}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
let permissions = this.all.permission.getStorage_permission();
let localRouter = next.url[0].path.trim();
let s = this.getPermissionByUrl(localRouter);
if (localRouter != 'charityAllInOne') {
this.all.share.SetCharityStep({ Step: -1 });
}
let token = this.all.cache.getStorage_userToken();
//no token
if (token == null) {
// navigate to login page
this._router.navigate(['/login']);
// you can save redirect url so after authing we can move them back to the page they requested
return false;
}
//has user permission
if (permissions != null) {
let permArray = permissions.toLowerCase().split(',');
let match = permArray.find(x => x == s);
if (match != undefined) //need has url permission
{
return true;
}
}
//page no permission
this._router.navigate(['/pageNotFound']);
// you can save redirect url so after authing we can move them back to the page they requested
return false;
}
}