every检查权限需遍历目标权限数组,对每个权限用includes判断是否存在于用户权限中;空数组返回true,逻辑方向不可颠倒,对象权限需用some自定义匹配。

用 every 检查权限数组是否包含“全部所需权限”,关键不是看它有没有,而是看“每一个所需权限”是否都在用户权限中。也就是说:你需要遍历“要检查的权限列表”,对每个权限,判断它是否存在于用户的权限数组里。
核心逻辑:every 遍历“目标权限”,includes 判断是否在用户权限中
every 本身不会自动比对两个数组,它只负责对一个数组的每个元素执行测试函数。所以你要把“检查某权限是否存在”这个逻辑写进回调函数里,通常配合 includes 使用:
-
用户权限(如
['read', 'write', 'delete'])是被查询的集合 -
目标权限(如
['read', 'write'])是你要确保全部满足的列表 - 对目标权限里的每一项,调用
userPerms.includes(item)
示例代码:
const userPerms = ['read', 'write', 'delete']; const requiredPerms = ['read', 'write']; const hasAll = requiredPerms.every(perm => userPerms.includes(perm)); console.log(hasAll); // true
注意:every 返回 true 的条件是“所有都满足”,空数组也返回 true
如果 requiredPerms 是空数组([]),every 会直接返回 true(逻辑上,“没有任何权限需要检查”即视为通过)。这在某些场景下合理(比如可选权限组),但若业务要求必须有至少一项权限,需额外判断:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 加一层
requiredPerms.length > 0校验 - 或用
requiredPerms.length && requiredPerms.every(...)
避免常见错误:别用 every 去遍历用户权限数组
错误写法(检查的是“用户每项权限是否都在 required 中”,逻辑反了):
// ❌ 错误:这是检查用户权限是否“全都是”所需权限(子集判断,且允许多余权限) userPerms.every(perm => requiredPerms.includes(perm));
这样写的结果是判断 userPerms ⊆ requiredPerms,而非你想要的 requiredPerms ⊆ userPerms。方向弄反会导致权限校验失效。
进阶:支持对象权限或带角色的结构
如果权限是对象形式(如 { action: 'read', resource: 'post' }),不能直接用 includes,需自定义匹配逻辑:
const userPerms = [
{ action: 'read', resource: 'post' },
{ action: 'write', resource: 'post' }
];
const requiredPerms = [
{ action: 'read', resource: 'post' }
];
const hasAll = requiredPerms.every(required =>
userPerms.some(user =>
user.action === required.action && user.resource === required.resource
)
);
这里用 some 替代 includes,实现对象的字段级匹配。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










