类 UserMenuCache

java.lang.Object
net.sohelp.boot.admin.core.cache.UserMenuCache
所有已实现的接口:
ISohelpCache

@Component public class UserMenuCache extends Object implements ISohelpCache
用户菜单权限缓存(永不过期,按需失效)

Key 规则:"{userId}" → 权限字符串列表 JSON。 NONE 模式每次直接查库。

该缓存组件负责管理用户的菜单访问权限列表,包括开发者(DEVELOPER)、 管理员(ADMIN)等系统内置角色权限以及通过岗位分配的菜单权限。 缓存采用懒加载策略,首次访问时从数据库加载并写入缓存。

从以下版本开始:
2023/7/21 15:16
作者:
AaronFung
  • 构造器详细资料

    • UserMenuCache

      public UserMenuCache()
  • 方法详细资料

    • init

      @PostConstruct public void init()
      初始化缓存提供者。

      在 Bean 构造完成后自动调用,通过 SohelpCacheManager 创建 名称为 "user_menu"、永不过期(TTL=0)的缓存提供者。

    • cacheName

      public String cacheName()
      获取缓存名称。
      指定者:
      cacheName 在接口中 ISohelpCache
      返回:
      缓存名称字符串 "user_menu"
    • cacheDescription

      public String cacheDescription()
      获取缓存的中文描述信息。
      指定者:
      cacheDescription 在接口中 ISohelpCache
      返回:
      缓存描述字符串 "用户菜单权限缓存"
    • reload

      public void reload()
      重新加载整个缓存。

      清空所有已缓存的用户菜单权限数据,下次访问时将重新从数据库加载。

      指定者:
      reload 在接口中 ISohelpCache
    • get

      @Comment("\u6839\u636e\u7528\u6237ID\u83b7\u53d6\u6743\u9650\u5217\u8868") public List<String> get(@Comment("\u7528\u6237ID") Long userId)
      根据用户ID获取该用户的权限列表。

      当缓存提供者处于 NONE 模式时,每次调用都直接查询数据库; 否则先检查缓存是否命中,未命中则触发 reload(Long) 加载后返回。

      参数:
      userId - 用户ID,不能为 null
      返回:
      该用户拥有的权限标识列表,若查询失败则返回空列表
    • validateAuthority

      @Comment("\u9a8c\u8bc1\u6743\u9650") public void validateAuthority(@Comment("\u7528\u6237ID") Long userId, @Comment("\u6743\u9650\u4ee3\u7801") String permissionNo) throws AccessPermissionException
      验证指定用户是否具有特定权限。

      从缓存中获取用户的权限列表,判断是否包含指定的权限代码。 如果用户无该权限,则抛出 AccessPermissionException 异常。

      参数:
      userId - 用户ID,不能为 null
      permissionNo - 需要验证的权限代码
      抛出:
      AccessPermissionException - 当用户不具备指定权限时抛出
    • remove

      @Comment("\u5220\u9664\u7528\u6237\u7f13\u5b58") public void remove(@Comment("\u7528\u6237ID") long userId)
      删除指定用户的权限缓存。

      从缓存中移除该用户的菜单权限数据,下次访问时将重新从数据库加载。

      参数:
      userId - 用户ID
    • reload

      @Comment("\u6839\u636e\u7528\u6237\u7684\u6743\u9650\u521d\u59cb\u5316Cache") public void reload(@Comment("\u7528\u6237ID") Long userId) throws SQLException
      根据用户ID重新从数据库加载权限信息并写入缓存。

      先删除旧缓存,然后查询用户信息,构建权限列表后写入缓存。 如果用户不存在则直接返回,不写入任何缓存。

      参数:
      userId - 用户ID,不能为 null
      抛出:
      SQLException - 当数据库查询失败时抛出