权限系统
本章节介绍企业级权限系统的设计方案,包括 RBAC 模型与数据权限控制。
权限模型
RBAC(基于角色的访问控制)
用户 → 角色 → 权限
User → Role → Permission1
2
2
核心表结构:
user:用户表role:角色表permission:权限表user_role:用户角色关联role_permission:角色权限关联
扩展:RBAC + 数据权限
功能权限:控制"能做什么"(增删改查)
数据权限:控制"能看什么数据"(部门/个人/全部)1
2
2
Spring Security 集成
java
@PreAuthorize("hasPermission('order', 'read')")
public List<Order> listOrders() {
// 数据权限过滤在 Service 层处理
return orderService.list(getCurrentUserDataScope());
}1
2
3
4
5
2
3
4
5
数据权限方案
| 方案 | 适用场景 |
|---|---|
| MyBatis 拦截器 | 自动注入 SQL 过滤条件 |
| 注解 + AOP | 灵活控制方法级数据范围 |
| 视图隔离 | 不同角色查不同数据库视图 |
常见问题
Q: 权限数据如何缓存? 将用户权限信息缓存到 Redis,登录时加载,修改角色后主动失效。
Q: 如何处理权限的层级继承? 使用递归或闭包表(closure table)存储树形权限节点。
