import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core'; import { CommonModule } from '@angular/common'; import { NbAuthModule, NbDummyAuthProvider } from '@nebular/auth'; import { NbSecurityModule, NbRoleProvider } from '@nebular/security'; import { of as observableOf } from 'rxjs/observable/of'; import { throwIfAlreadyLoaded } from './module-import-guard'; import { DataModule } from './data/data.module'; import { AnalyticsService } from './utils/analytics.service'; const NB_CORE_PROVIDERS = [ ...DataModule.forRoot().providers, ...NbAuthModule.forRoot({ providers: { email: { service: NbDummyAuthProvider, config: { delay: 3000, login: { rememberMe: true, }, }, }, }, }).providers, NbSecurityModule.forRoot({ accessControl: { guest: { view: '*', }, user: { parent: 'guest', create: '*', edit: '*', remove: '*', }, }, }).providers, { provide: NbRoleProvider, useValue: { getRole: () => { return observableOf('guest'); // here you could provide any role based on any auth flow }, }, }, AnalyticsService, ]; @NgModule({ imports: [ CommonModule, ], exports: [ NbAuthModule, ], declarations: [], }) export class CoreModule { constructor(@Optional() @SkipSelf() parentModule: CoreModule) { throwIfAlreadyLoaded(parentModule, 'CoreModule'); } static forRoot(): ModuleWithProviders { return { ngModule: CoreModule, providers: [ ...NB_CORE_PROVIDERS, ], }; } }