如何根据账户类型正确过滤带布尔属性的JavaScript对象数组
问题核心原因
- 逻辑反向:你的现有过滤规则是「不是某类用户就删除对应权限的条目」,串行执行的情况下只要用户不同时拥有所有身份,就会误删其他权限的可见内容。比如Admin用户不属于Manager,就会触发第二个过滤逻辑,删掉所有Manager权限可见的条目,不符合预期。
- 拼写不一致:数组条目中Manager对应的权限字段是
manage,但你的过滤代码中写的是manager,字段不匹配导致过滤规则完全不生效。
修复方案
推荐用一次过滤完成所有判断,避免多次遍历修改数组,逻辑更清晰也更易维护:
this.items = this.items.filter(item => { // 管理员可看所有内容 if (acc_type === 'Admin') return true // 经理可排除仅管理员可见的内容 if (acc_type === 'Manager') return item.admin !== true // 普通用户仅可见无权限限制的内容 return !item.admin && !item.manage })
如果后续需要扩展更多权限类型,可以用更通用的权限映射方案:
// 配置各账户类型持有的权限标识 const permissionConfig = { Admin: ['admin', 'manage'], Manager: ['manage'] } const userPerms = permissionConfig[acc_type] || [] this.items = this.items.filter(item => { // 收集当前条目要求的权限 const requiredPerms = [] if (item.admin) requiredPerms.push('admin') if (item.manage) requiredPerms.push('manage') // 无权限要求的内容所有人可见 if (requiredPerms.length === 0) return true // 只要用户持有任意一个要求的权限即可见 return requiredPerms.some(perm => userPerms.includes(perm)) })
内容的提问来源于stack exchange,提问作者joshk132
相关产品推荐
相关产品推荐

