授权安全清单
文档编号: SYS-SEC-AUTHZ-001
版本: 1.0
创建日期: 2026-03-08
作者: 安全架构师
状态: ✅ 已完成
1. 概述
1.1 目的
本文档定义System平台的授权安全要求,确保用户只能访问其被授权的资源,实现最小权限原则。
1.2 适用范围
- 菜单权限控制
- 按钮/操作权限控制
- 数据权限控制
- API接口权限控制
- 文件资源权限控制
1.3 参考标准
- GB/T 22239-2019 信息安全技术 网络安全等级保护基本要求
- OWASP Authorization Cheat Sheet
- RBAC模型标准
2. RBAC权限模型
2.1 模型定义
System平台采用RBAC(Role-Based Access Control)基于角色的访问控制模型。
用户(User) --分配--> 角色(Role) --拥有--> 权限(Permission) --控制--> 资源(Resource)2.2 核心实体
| 实体 | 说明 | 属性 |
|---|---|---|
| 用户(User) | 系统使用者 | 用户ID、用户名、状态等 |
| 角色(Role) | 权限集合 | 角色ID、角色名、角色编码、数据范围等 |
| 权限(Permission) | 操作许可 | 权限ID、权限名、权限编码、资源类型等 |
| 资源(Resource) | 被保护对象 | 菜单、按钮、API、数据等 |
2.3 权限类型
| 权限类型 | 说明 | 示例 |
|---|---|---|
| 菜单权限 | 页面访问权限 | 系统管理、用户管理等 |
| 按钮权限 | 操作按钮权限 | 新增、编辑、删除、导出等 |
| API权限 | 接口访问权限 | /api/user/add、/api/user/delete等 |
| 数据权限 | 数据访问范围 | 全部、本部门、本人等 |
| 文件权限 | 文件操作权限 | 上传、下载、删除等 |
3. 权限配置
3.1 角色管理
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 角色编码唯一 | 全局唯一标识 | 数据库唯一约束 | 必须 |
| 角色层级 | 支持角色继承 | 角色表parent_id字段 | 建议 |
| 默认角色 | 新用户默认角色 | 系统配置 | 建议 |
| 角色状态 | 启用/禁用 | 角色表status字段 | 必须 |
| 角色描述 | 角色用途说明 | 角色表description字段 | 建议 |
3.2 权限分配
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 角色-权限关联 | 多对多关系 | 关联表role_permission | 必须 |
| 用户-角色关联 | 多对多关系 | 关联表user_role | 必须 |
| 批量分配 | 支持批量授权 | 批量操作接口 | 建议 |
| 权限继承 | 子角色继承父角色权限 | 递归查询 | 建议 |
3.3 数据权限范围
| 范围级别 | 说明 | 适用场景 |
|---|---|---|
| 全部数据 | 可查看所有数据 | 超级管理员 |
| 本部门及子部门 | 可查看本部门及下级部门数据 | 部门经理 |
| 本部门 | 仅可查看本部门数据 | 部门成员 |
| 仅本人 | 仅可查看自己的数据 | 普通员工 |
| 自定义 | 指定特定数据范围 | 特殊场景 |
4. 权限控制实现
4.1 前端权限控制
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 菜单渲染 | 根据权限动态渲染菜单 | Vue Router + Pinia | 必须 |
| 按钮显示 | 无权限按钮隐藏或禁用 | v-permission指令 | 必须 |
| 路由守卫 | 无权限路由跳转403页面 | 路由前置守卫 | 必须 |
| 权限缓存 | 登录后缓存权限列表 | Pinia Store | 必须 |
| 权限刷新 | 支持手动刷新权限 | 刷新接口 | 建议 |
Vue权限指令示例:
typescript
// v-permission指令
vPermission: {
mounted(el, binding) {
const { value } = binding;
const permissions = usePermissionStore().permissions;
if (!permissions.includes(value)) {
el.parentNode?.removeChild(el);
}
}
}4.2 后端权限控制
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 方法级鉴权 | 注解方式控制权限 | @PreAuthorize | 必须 |
| URL级鉴权 | 配置方式控制权限 | Security配置 | 必须 |
| 数据级鉴权 | SQL拦截添加数据范围 | MyBatis Plus拦截器 | 必须 |
| 权限校验 | 每次请求校验权限 | JWT过滤器 | 必须 |
注解示例:
java
// 方法级权限控制
@PreAuthorize("@ss.hasPermi('system:user:add')")
public Result add(@RequestBody User user) { }
// 角色控制
@PreAuthorize("@ss.hasRole('admin')")
public Result adminOnly() { }4.3 数据权限实现
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| SQL拦截 | 自动添加数据范围条件 | MyBatis Plus插件 | 必须 |
| 数据脱敏 | 敏感字段脱敏展示 | 注解+序列化 | 建议 |
| 字段级权限 | 控制字段可见性 | 动态SQL | 可选 |
数据权限拦截器:
java
@Component
public class DataScopeInterceptor implements InnerInterceptor {
@Override
public void beforeQuery(Executor executor, MappedStatement ms,
Object parameter, RowBounds rowBounds,
ResultHandler resultHandler, BoundSql boundSql) {
// 获取当前用户数据范围
DataScope scope = SecurityUtils.getDataScope();
// 修改SQL添加数据范围条件
String originalSql = boundSql.getSql();
String scopeSql = addDataScopeCondition(originalSql, scope);
// ...
}
}5. 敏感操作控制
5.1 二次确认机制
| 操作类型 | 确认方式 | 说明 |
|---|---|---|
| 删除操作 | 弹窗确认 | 确认删除提示 |
| 批量删除 | 弹窗确认 + 验证码 | 高风险操作 |
| 修改管理员 | 密码验证 | 验证当前用户密码 |
| 修改权限 | 密码验证 | 验证当前用户密码 |
| 导出数据 | 弹窗确认 | 确认导出范围 |
5.2 操作审计
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 操作日志 | 记录所有敏感操作 | AOP切面 | 必须 |
| 日志内容 | 操作用户、时间、IP、结果 | 日志表 | 必须 |
| 日志保留 | 保留180天 | 定时清理 | 建议 |
| 日志查询 | 支持按条件查询 | 管理界面 | 建议 |
6. API权限控制
6.1 API权限映射
| API路径 | 请求方式 | 所需权限 | 说明 |
|---|---|---|---|
| /api/user/list | GET | system:user:list | 查询用户列表 |
| /api/user/add | POST | system:user:add | 新增用户 |
| /api/user/edit | PUT | system:user:edit | 修改用户 |
| /api/user/delete | DELETE | system:user:delete | 删除用户 |
| /api/user/export | GET | system:user:export | 导出用户 |
6.2 API安全要求
| 检查项 | 要求 | 实现方式 | 优先级 |
|---|---|---|---|
| 身份认证 | 所有API需认证 | JWT验证 | 必须 |
| 权限校验 | 所有API需授权 | 权限注解 | 必须 |
| 越权防护 | 防止横向越权 | 数据权限控制 | 必须 |
| 垂直越权 | 防止低权限访问高权限接口 | 角色校验 | 必须 |
7. 最小权限原则
7.1 权限设计原则
| 原则 | 说明 | 实施方法 |
|---|---|---|
| 默认拒绝 | 默认无权限,显式授权 | 白名单机制 |
| 最小必需 | 只授予完成任务的最小权限 | 角色细分 |
| 职责分离 | 关键操作需多人授权 | 双人复核 |
| 权限回收 | 离职/调岗及时回收权限 | 定时任务检查 |
7.2 权限审查
| 检查项 | 频率 | 负责人 |
|---|---|---|
| 用户权限审查 | 每季度 | 安全管理员 |
| 角色权限审查 | 每半年 | 安全管理员 |
| 离职人员权限清理 | 实时 | 系统管理员 |
| 异常权限使用分析 | 每月 | 安全管理员 |
8. 安全检查清单
8.1 开发阶段检查
- [ ] RBAC模型实现
- [ ] 菜单权限控制
- [ ] 按钮权限控制
- [ ] API权限控制
- [ ] 数据权限实现
- [ ] 敏感操作二次确认
- [ ] 操作日志记录
8.2 测试阶段检查
- [ ] 未授权访问测试
- [ ] 水平越权测试
- [ ] 垂直越权测试
- [ ] 权限绕过测试
- [ ] 数据范围测试
8.3 部署阶段检查
- [ ] 默认角色权限配置
- [ ] 管理员账号权限
- [ ] 权限缓存配置
- [ ] 操作日志审计
9. 合规要求
9.1 等保三级要求
| 控制点 | 要求 | 实现 |
|---|---|---|
| S3A2-访问控制 | 制定访问控制策略 | RBAC模型 |
| S3A2-权限分离 | 管理员权限分离 | 角色细分 |
| S3A2-最小权限 | 默认最小权限 | 白名单机制 |
| S3A3-安全审计 | 操作行为审计 | 操作日志 |
10. 评审记录
10.1 评审意见
| 序号 | 评审项 | 评审意见 | 评审结果 |
|---|---|---|---|
| 1 | RBAC模型完整性 | 模型设计完整,支持多维度权限 | ✓ 通过 |
| 2 | 权限控制粒度 | 支持菜单、按钮、API、数据权限 | ✓ 通过 |
| 3 | 最小权限原则 | 默认拒绝,显式授权 | ✓ 通过 |
| 4 | 越权防护 | 水平和垂直越权防护 | ✓ 通过 |
| 5 | 等保合规 | 满足等保三级访问控制要求 | ✓ 通过 |
10.2 评审结论
评审结果: ✅ 通过
评审日期: 2026-03-08
评审人员:
- 安全专家: _________________ (签字) 2026-03-08
- 技术负责人: _________________ (签字) 2026-03-08
- 产品经理: _________________ (签字) 2026-03-08
11. 修订记录
| 版本 | 日期 | 作者 | 变更内容 |
|---|---|---|---|
| 1.0 | 2026-03-08 | 安全架构师 | 初始版本,定义授权安全清单 |
