Как я могу заблокировать доступ к маршруту для определенных пользователей - PullRequest
0 голосов
/ 14 октября 2018

В моем файле app.router.ts есть несколько маршрутов:

export const ROUTES: Routes = [
    { path: 'login', component: LoginComponent },
    { path: 'home', redirectTo: '/requisicao', pathMatch: 'full' },
    { path: 'requisicao', component: PageRequisicaoComponent, canActivate: [ AuthGuard ] },
    { path: 'pacientes', component: PagePacienteComponent, canActivate: [ AuthGuard ] },
    { path: 'resultados', component: PageResultadoComponent, canActivate: [ AuthGuard ]},
    { path: 'administrativo', component: PagePainelAdministrativoComponent, canActivate: [ AuthGuard ]},
    { path: '', redirectTo: '/login', pathMatch: 'full' },
    { path: '**', component: PageNotFoundComponent}
]

И у меня есть два типа пользователей.Как я могу заблокировать доступ к некоторому маршруту для пользователей типа 1?

@Injectable()
export class AuthGuard implements CanActivate{

    constructor(
        private router: Router
    ){}

    canActivate(): boolean{

    }
}

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Определение охраны маршрута

Существует два способа определения охраны.Более простой способ заключается в создании функции, как показано ниже:

// file app.routing.ts
const appRoutes: Routes = [
    {path: "", redirectTo: "board", pathMatch: "full"},
    {path: "board", component: BoardComponent, canActivate: ["boardGuard"]}
];

export const routingProviders = [
    {provide: "boardGuard", useValue: boardGuard}
];

export function boardGuard(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    return true;
}
export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);

// file app.module.ts
import {routing, routingProviders} from "./app.routing";

@NgModule({
   import: [routing],
   providers: [routingProviders]
})
export class AppComponent {}

Вы также можете использовать внедрение зависимостей в функции защиты, например:

export const tpRoutingProviders = [
    {provide: "authenticatedGuard", useFactory: (authService: AuthService) => {
            return () => authService.isUserAuthenticated();
        },
        deps: [AuthService]
    }
];

Второй параметр:определить класс, который реализует интерфейс Can Activate.Следуйте этому:

// file app.routing.ts

const appRoutes: Routes = [
   {path: "worksheet", component: WorksheetComponent, canActivate: [WorksheetAccessGuard]}     
];

// file ActivationGuards.ts

@Injectable()
export class WorksheetAccessGuard implements CanActivate {
   private static USER_PARAM = "userId";

   constructor(private router: Router, private userService: CurrentUserService) {}

   public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
      const currentUser = this.userService.currentUser;
      const paramUser = route.params[WorksheetAccessGuard.USER_PARAM];
      if (paramUser && paramUser !== currentUser.id && !currentUser.admin) {
          this.router.navigate(["worksheet"]);
          return false;
      }
      return true;
   }
}

// file app.module.ts

@NgModule({
   providers: [WorksheetAccessGuard]
})
export class AppComponent {}
0 голосов
/ 14 октября 2018

Вам нужен какой-то механизм для извлечения типа пользователя.Затем вы можете легко вернуть true или false в зависимости от типа пользователя.

@Injectable()
export class AuthGuard implements CanActivate {

    canActivate(): boolean {

        // 1 fetch the type of use
        const type = 1;
        if (type === 1) return false;
        else return true;

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...