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 恶作剧,其中一个函数试图用 属性 做一些不存在的事情,每次都把整个对象搞砸了。
我有一个 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 恶作剧,其中一个函数试图用 属性 做一些不存在的事情,每次都把整个对象搞砸了。