用闭包实现带权限感知的请求缓存,将角色、过期时间等权限上下文与缓存Map封装在闭包内,通过role拼接key、三重校验get、快照绑定set及invalidateByRole失效机制,实现权限隔离、自动守卫与模块化缓存管理。

用闭包实现“带权限感知”的请求缓存,核心是把当前用户权限上下文(如角色、token 有效期、权限变更标识)封装进缓存逻辑内部,让每次读写都自动关联权限状态,避免缓存与权限脱节。它不依赖全局变量或外部状态管理,天然隔离、可复用、不易误用。
闭包内封装权限上下文与缓存实例
将权限相关数据(如 role、expireAt、isLoaded)和缓存 Map 封装在同一个闭包作用域中,对外只暴露受控的 get/set 方法:
- 初始化时传入权限元数据,例如
init({ role: 'admin', expireAt: Date.now() + 3600000 }) - 缓存 key 由请求参数 + 当前 role 拼接生成,确保同一接口在不同角色下命中不同缓存项
- 所有 set 操作前校验
Date.now() < expireAt,过期则拒绝写入并清空旧缓存
读取时自动做权限有效性守卫
get 方法不只是查 Map,而是组合三重判断:
- 是否存在缓存项
- 缓存项是否未过期(对比闭包内维护的
expireAt) - 当前 role 是否与缓存写入时一致(防止角色切换后仍读旧数据)
任一条件不满足,就返回 undefined 或抛出特定错误,强制触发真实请求,不降级兜底。
前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。
立即学习“前端免费学习笔记(深入)”;
写入时绑定权限快照并支持主动失效
set 不仅存响应数据,还存一份轻量快照:{ data, role, timestamp, expireAt }:
- 后续 get 可比对快照中的 role 和当前 role 是否一致,不一致即视为无效缓存
- 提供
invalidateByRole(newRole)方法,遍历缓存 Map,删除所有 role 不匹配的项 - 监听权限变更事件(如
auth:changed)时,调用该方法完成自动清理
配合前端路由/组件做细粒度缓存生命周期管理
利用闭包函数可多次调用的特性,为不同业务模块创建独立缓存实例:
- 登录页用一个闭包实例,只缓存公共配置,不关心用户角色
- 后台管理页用另一个,绑定 admin 角色快照,且设置更短 TTL
- 用户个人中心页再建一个,以 userId 为上下文维度,缓存个性化数据
每个实例互不影响,权限变更时只需刷新对应模块的闭包缓存,不波及其他。

















