多租户权限管理设计思路 链表+跳表+哈希表
从目前AI工程化的角度来看,多租户系统越来越重要,传统 RBAC(基于角色的访问控制)通常依赖树形组织结构。 我在实践中尝试了一种新思路:链表为主体,跳表加速,哈希表直达,再辅以 SessionID 管理会话安全与状态。 这篇博客是我前段时间思考的一种多租户权限管理设计思路,顺便把它整理出来总结一下。 以链表为基础,结合跳表和哈希表实现用户节点的快速增删与查询,在保证多租户隔离的前提下,提供极高的灵活性和可扩展性。 核心设计思想 链表(Linked List) 每个用户是主链表的一个节点;当用户创建团队时,在其下挂载团队子链表。链表插入/删除近 O(1)。 跳表(Skip List) 为有序遍历、范围检索、分页提供 O(log n) 查询/插入。 哈希表(Hash Map) uid → UserNode、team_id → TeamNode。 SessionID 强绑定 uid 的会话实例,用于登录态与设备级控制;缓存中维护 session_id → uid,支持强制下线、多设备策略。 RBAC + ABAC 角色聚合(直绑/团队继承/租户默认)与属性策略(时间/地点/设备/标签)结合,由 PDP(策略决策点)裁决。 Outbox 事件一致性 数据库为真,事件驱动索引/缓存同步,避免脏读与丢失更新。 – 总体系统架构 1. 数据结构架构图 1.1 ER模型(ER持久层) 1.2 类图 1.3 运行时数据结构(链表 + 子链表 + 跳表 + 哈希表) 2. SessionID: 与uid的强绑定与会话安全 核心关系:一个 uid 可拥有多个 session_id(多设备/多终端并行登录);每个 session_id 都是该用户一次独立会话。 2.1 会话与缓存命名空间 说明: 多设备:若需“单设备登录”,新登录时清空 user:sess:{uid} 下旧会话并删除对应 sess:*。...