簡體   English   中英

Public get從auth服務返回一個權限布爾值,該權限布爾值初始化為false,並在NGRX存儲返回值但未定義時進行修改

[英]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中顯示一個按鈕:

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

現在,在我的身份驗證服務中,我在Permissions模型之后初始化了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;
  }

在Authentication上,將權限數組發送到reducer,並使用ngrx store設置權限。

.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

引用定義吸氣劑的那一行。

但是到處都有定義。 我的代碼中沒有一個地方,我尚未初始化並使用默認值“ false”定義了模型變量。

在我的reducer中處理權限數組:

  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 shenanigans,其中一個函數試圖使用不存在的屬性來做某事,每次都將init上的整個對象弄亂了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM