Public 从 auth 服务中获取 returns 权限布尔值,当 NGRX 存储 returns 一个值但未定义时,它被初始化为 false 并被修改

Public get returns a permission boolean from auth service, which is initialized to false and modified when NGRX store returns a value but is UNDEFINED

我有一个 Angular7 应用程序,我选择根据定义为 app.component 的布尔值在 app.component 中显示一个按钮:

get superUser(): boolean {
    return this.auth.userPermissions.SUPER_USER;
  }

现在在我的身份验证服务中,我在权限模型之后初始化了 userPermissions,所有权限都标记为 'false'。

permissions: Permissions = {
    SUPER_USER: false,
    CLIENT_ADMIN: true,
    ADD_CLIENT: false,
    ADD_USER: false,
    DELETE_CLIENT: false,
    DELETE_USER: false,
    READ_ALL_CLIENTS: false,
    READ_ALL_USERS: false,
    READ_REPORTS: false,
    READ_USERS: false,
    UPDATE_CLIENT: false
  };

  public get userPermissions(): Permissions {
    return this.permissions;
  }

在身份验证时,权限数组被发送到 reducer 并且正在使用 ngrx 存储设置权限。

.subscribe((token: string) => {
            Cookie.set('access_token', token);
            this.store.dispatch(new UserActions.SetUser(this.currentUser));
            const currentUser = this.helper.decodeToken(token);
            this.store.dispatch(
              new PermissionsActions.SetPermissions(currentUser.permissions)
            );
            return this.router.navigate(['']);
          });

在服务中,我正在订阅该存储值并更新权限对象。

    this.permissionSubscription = this.store
      .select('permissions')
      .subscribe(permissions => {
        this.permissions = permissions;
      });

现在的麻烦是,认证后的第一次整个事情崩溃返回:

Cannot read property 'SUPER_USER' of undefined

引用我定义 getter 的行。

但是到处都有定义。我的代码中没有一个地方我没有用 'false' 默认值初始化和定义模型变量。

在我处理权限数组的减速器中:

  const keys: string[] = Object.keys(state);

  for (const permission of action.permissions) {
    if (keys.includes(permission.name)) {
      state[permission.name] = true;
    } else {
      return console.log('ELSE BLOCK FIRING');
    }
  }

  return tassign(state);

我似乎忘记了使用该数组中的权限更新模型,当 for 循环到达那个位置时,它使整个状态未定义。

最终变成了 reducer 恶作剧,其中一个函数试图用 属性 做一些不存在的事情,每次都把整个对象搞砸了。