Files
lingxi/.env.example
T
Stev_Wang 4d9eb980af
ci / 质量门禁 (push) Canceled after 0s
feat(identity): 完成 A1 身份认证与用户管理全栈落地
背景:
- 开发计划 A1 批次要求登录/刷新/登出、用户生命周期、路由与按钮权限、
  权限三态用例;视觉已选定方案 B(主从分栏 + 分屏登录)。

改动:
- packages/shared:新增 identity 契约(User/Me/Login/Refresh/Department/Role)
  与 user:view 权限点;写接口 strict 校验。
- apps/api:新增 identity 模块与 Prisma expand 迁移(departments/users/roles/
  user_roles/role_permissions/refresh_tokens);Argon2id、JWT access+refresh
  旋转与 jti 吊销、登录失败锁定、首登强改、守卫链、/me、@Audit 上下文、幂等种子。
- apps/web:按方案 B 落地 /users、/users/new、/users/:id、分屏登录与 403;
  usePermission/<Can>、路由守卫、401 单飞刷新、停用会话兜底、Semi + token。
- e2e:新增 A1-QA-01 六类端到端用例(A1_E2E 门控)。
- openapi 与前端生成类型同步;.env.example 登记认证变量;实施报告入库。

影响面:
- 新增运行时依赖 @nestjs/jwt、argon2(计划 A1-BE-02 已批准,版本精确锁定)。
- 迁移为 expand,不改既有表;本地需 prisma migrate 后重新 seed。
- 平台导航「用户与组织」由 /platform/users 调整为 /users。

回滚方式:
- 代码整体回滚本提交;迁移为 expand,回滚代码不需删表;
- 本地如需彻底回退按实施报告 §6 处理。

验证证据:
- pnpm format:check / lint / typecheck 通过;
- pnpm test:shared 95 / api 60 / web 55;
- pnpm test:int:7 个(真实 PG/Redis);
- A1_E2E=1 playwright test e2e/a1-identity.spec.ts:6/6;
- 报告:docs/开发计划/灵犀_A1身份认证与用户管理_实施报告_V0.1.md
2026-11-03 00:03:33 +08:00

55 lines
1.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 灵犀 · 环境变量示例(入库,禁止写真实密钥)
# 使用:cp .env.example .env.local(工程规范 09 ENV-09)
# 注意:本地 PostgreSQL/Redis 复用本机已有 Docker 服务(127.0.0.1:5432 / 6379);
# 对象存储为公网 RustFS,本地真实值只写入 .env.local / .env(已 gitignore)。
# ---------- 运行环境 ----------
NODE_ENV=development
LOG_LEVEL=debug
# ---------- 数据库(PostgreSQL 18) ----------
DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:5432/lingxi?schema=public
# ---------- Redis(7.4) ----------
REDIS_URL=redis://127.0.0.1:6379
# ---------- 对象存储(RustFS,S3 协议;A0 统一使用 lingxi-dev 桶) ----------
S3_ENDPOINT=https://oss.xinsenidea.com
S3_REGION=us-east-1
S3_BUCKET_ASSETS=lingxi-dev
S3_BUCKET_RENDERS=lingxi-dev
S3_BUCKET_TEMP=lingxi-dev
S3_ACCESS_KEY=<rustfs-access-key>
S3_SECRET_KEY=<rustfs-secret-key>
# ---------- 认证(本地 dev 值,生产由密钥管理注入;密钥至少 32 位) ----------
JWT_ACCESS_SECRET=dev-only-jwt-access-secret-change-me-32
JWT_REFRESH_SECRET=dev-only-jwt-refresh-secret-change-me-32
# access / refresh 有效期(秒):15 分钟 / 7 天
JWT_ACCESS_TTL_SECONDS=900
JWT_REFRESH_TTL_SECONDS=604800
# 登录失败阈值与锁定时长(分钟内累计失败达阈值即锁定)
AUTH_MAX_LOGIN_FAILURES=5
AUTH_LOCK_MINUTES=15
# ---------- API ----------
PORT=3000
HOST=0.0.0.0
WEB_ORIGIN=http://127.0.0.1:5173
MAX_UPLOAD_MB=500
# ---------- Worker ----------
QUEUE=default
WORKER_CONCURRENCY=2
# ---------- 前端(只能暴露 VITE_PUBLIC_* 前缀,ENV-07) ----------
VITE_PUBLIC_API_BASE_URL=http://127.0.0.1:3000/api/v1
# A0 登录壳没有接后端鉴权,置 true 时登录页写入本地演示会话以便查看布局;A1 接入真实登录后删除。
VITE_PUBLIC_DEMO_SESSION=true
# ---------- 可观测 ----------
OTEL_EXPORTER_OTLP_ENDPOINT=
# ---------- 功能开关 ----------
FEATURE_VIDEO=false