Я хочу использовать сервис RoleGuard в одном из моих проектов Angular 6.Я создал файл - 'role-guard.service.ts
' в папке "_guards
".Теперь в файле маршрутов я объявил то же, что и ниже, и попробую реализовать то же самое.Обратите внимание, у меня есть общий модуль, и я не объявлял roleguardservice в экспорте.
import { RoleGuardService } from '../../_guards/role-guard.service';
const routes: Routes = [
{ path: 'edit-account-info', component: EditAccountInfoComponent, canActivate: [RoleGuardService] },
....
....
]
}
Ниже мой app.module.ts file
:
import { AuthGuard, DisableAuthGuard} from '../../_guards/auth.guard';
....
....
exports : [
//
],
providers: [AuthGuard, DisableAuthGuard, {
provide: RECAPTCHA_SETTINGS,
useValue: {
siteKey: environment.recaptchasiteKey,
} as RecaptchaSettings,
}]
Я хочу изменить маршрутызависит от роли пользователя.Например, если пользовательская роль типа 1, он будет перенаправлен на «edit-account-info», в противном случае (если пользовательская роль типа 2) он перенаправит на «agent / edit-account-info».Если пользовательская роль типа 2 хочет получить доступ к пути «edit-account-info», он перейдет на страницу «unauthorize».
Но для ее реализации, когда я захочу получить доступ к странице, «edit-account-info»"это показывает мне ошибку:
Uncaught (в обещании): Ошибка: StaticInjectorError (AppModule) [RoleGuardService]: StaticInjectorError (Платформа: core) [RoleGuardService]: NullInjectorError: Нет поставщика для RoleGuardServer!Ошибка: StaticInjectorError (AppModule) [RoleGuardService]: StaticInjectorError (Платформа: ядро) [RoleGuardService]: NullInjectorError: Нет поставщика для RoleGuardService!... ....
Ниже приведено содержимое файла role-guard.sevice.ts
:
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot } from '@angular/router';
//import { AuthGuard } from './auth.guard';
import { CommonService } from './../services/common.service';
import { AuthGuard, DisableAuthGuard} from './auth.guard';
@Injectable()
export class RoleGuardService implements CanActivate {
private userDetails: any;
public user_salt: any;
public roleName: any;
constructor(
//public auth: AuthService,
public router: Router,
private commService: CommonService,
private location: Location,
) {
}
canActivate(route: ActivatedRouteSnapshot): boolean {
this.userDetails = this.commService.getSession('user');
this.user_salt = this.commService.getSession('user_salt');
const resultStorage = JSON.parse(this.commService.localstorageDecryption(this.userDetails, this.user_salt, 'N'));
if (this.roleName === resultStorage.type) {
return true;
}
// navigate to not found page
this.router.navigate(['/404']);
return false;
}
}