feat: 后端用户认证和权限过滤

- 新增 auth 模块:jumpToken 代理交换、用户信息获取、JWT 签发
- 三级权限:full(所有权限/数智中心/BI-Leader)、department(BI-Leader-Dep)、personal
- 添加 managerId 到车辆数据模型,支持个人级别按 userId 精确过滤
- auth 中间件保护所有 /api/* 端点(跳过 /api/health 和 /api/auth/*)
- 所有路由集成 filterByPermission 权限过滤

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
kkfluous
2026-04-02 15:35:29 +08:00
co-authored by Claude Opus 4.6
parent 6dbd36dcd3
commit 2575778293
14 changed files with 395 additions and 14 deletions
+26
View File
@@ -0,0 +1,26 @@
import type { AuthUser } from './types.js';
/**
* 通用权限过滤函数
* 适配 CachedVehicle(department, manager, managerId)和 Vehicle(departmentName, customerManager, managerId)
*/
export function filterByPermission<T>(
items: T[],
user: AuthUser,
): T[] {
if (user.permissionLevel === 'full') return items;
if (user.permissionLevel === 'department') {
return items.filter(v => {
const obj = v as any;
const dept = obj.departmentName || obj.department || null;
return dept === user.depName;
});
}
// personal: 仅看自己负责的车辆 (bd = userId)
return items.filter(v => {
const obj = v as any;
return obj.managerId === user.userId;
});
}