
1) 【一句话结论】采用RBAC+策略引擎的权限模型,通过分布式事务+Redis集群保障数据一致性,结合角色继承缓存优化(父角色权限集合缓存)和动态配置事务回滚,以及高并发下的缓存雪崩应对(Redis集群+随机过期时间+缓存预热),实现多校区LMS的权限控制。
2) 【原理/概念讲解】
首先解释RBAC(基于角色的访问控制):核心是“用户-角色-权限”三层映射,角色作为中间层简化权限管理(类比:公司里“部门”是角色,“员工”是用户,“审批文件”是权限,员工通过部门获得权限)。
接着讲角色继承:通过角色层级关系传递权限(如“教师”角色继承“学生”角色的“查看课程”权限,则教师也可查看课程),实现权限的层级传递。
然后说明权限动态配置:通过管理后台或API接口,动态修改角色的权限(如新增“管理员”角色的“删除课程”权限),支持权限的实时调整。
再讲数据一致性:通过数据库事务(ACID)保证权限配置的原子性(如修改角色权限时,先更新角色-权限关联表,再更新缓存,确保操作要么全成功要么全失败)。
最后解释高并发权限校验:使用Redis作为分布式缓存存储权限规则,减少数据库查询;通过缓存预热(初始化时加载所有权限到缓存)、布隆过滤器过滤无效请求(避免全表扫描)、Redis锁保证并发修改一致性,应对高并发场景。
3) 【对比与适用场景】
RBAC vs RBAC+策略(基于属性的访问控制):
| 对比维度 | RBAC(基于角色的访问控制) | RBAC+策略(基于属性的访问控制) |
| --- | --- | --- |
| 定义 | 通过角色管理权限,用户分配角色 | 在RBAC基础上,增加属性(如用户部门、时间)作为条件 |
| 特性 | 简单,适合角色固定场景 | 更灵活,支持复杂条件(如“仅周一允许教师修改课程”) |
| 使用场景 | 多校区教师、学生角色固定 | 需要更细粒度控制,如按部门、时间限制权限 |
| 注意点 | 角色层级复杂时易出错 | 策略规则复杂,维护成本高 |
多校区数据同步方案:
| 方案 | 分布式数据库(如TiDB) | 消息队列(如Kafka) |
| --- | --- | --- |
| 一致性 | 强一致性(事务保证) | 最终一致性(需补偿) |
| 适用场景 | 多校区数据强一致性要求高(如权限修改) | 数据延迟容忍度高,写入量大的场景 |
| 注意点 | 部署复杂,成本高 | 需补偿机制,延迟风险 |
4) 【示例】
假设角色“教师”初始权限:创建课程、查看课程列表。通过角色继承,“管理员”继承“教师”的所有权限,同时管理员有“删除课程”权限。动态配置时,通过API调用POST /api/permissions/update?roleId=2&permission=deleteCourse,将角色2(管理员)的权限更新为包含“删除课程”。权限校验时,用户登录后,系统从Redis获取该用户的角色权限集合,判断请求操作是否在权限集合内。多校区同步时,通过TiDB的分布式事务,确保各校区权限数据一致。
5) 【面试口播版答案】
面试官您好,针对多校区LMS的权限控制模块,我的设计核心是采用RBAC+策略引擎的权限模型,通过分布式事务和Redis集群保障数据一致性,同时针对高并发场景设计了缓存雪崩应对(Redis集群+随机过期时间+缓存预热),以及角色继承的缓存优化(父角色权限集合缓存)和动态配置的事务回滚机制。具体来说,权限模型用用户-角色-权限三层结构,角色继承实现层级权限传递,动态配置通过API实时更新,数据一致性靠数据库事务(如两阶段提交)保证。高并发下,权限校验先查Redis缓存,缓存失效时查询数据库,并设置随机过期时间防雪崩。多校区同步用TiDB强一致性,确保各校区权限数据一致。这样既能支持多角色继承和动态配置,又能保证高并发和跨校区一致性。
6) 【追问清单】
7) 【常见坑/雷区】