实施 NbRoleProvider

Implementing NbRoleProvider

我在我的 Angular 应用程序中使用 Nebular 实现 NbRoleProvider

我是这样实现的:

@Injectable()
export class RoleProvider implements NbRoleProvider {

    constructor(private store: Store<IAppStore>) {
    }

    getRole(): Observable<string[]> {

        const loggedUser = this.store.select<IUser>(x => x.loggedUserStore.loggedUser);

        let result = [];
        loggedUser.subscribe(data => {
            if (data != null) {
                result = data.roles; // returns ['admin']
            }
        });
        return of(result);

        // this works!!
        // return of(['admin']);
    }
}

如果我 return 像 ['admin'] 这样的固定数组角色,一切都按预期工作。如果我尝试订阅商店的价值,它将无法正常工作。调试 我看到当 data 对象仍然是 nullgetRole 方法被调用了几次,然后当它加载了适当的数组列表时又被调用了几次。

似乎 *nbIsGranted 指令在订阅仍在等待存储中的数据的第一时刻呈现。

我想念什么?

我会尝试直接从商店返回 Observable,例如:

import { map } from 'rxjs/operators';

@Injectable()
export class RoleProvider implements NbRoleProvider {

    constructor(private store: Store<IAppStore>) {}

    getRole(): Observable<string[]> {
      const loggedUser = this.store.select<IUser>(x => x.loggedUserStore.loggedUser);

      return loggedUser.pipe(map(data => data ? data.roles : []));
    }
}