Files
PROJECT-CONTORL/openspec/changes/archive/2025-12-28-add-user-auth/specs/user-auth/spec.md
beabigegg 1fda7da2c2 feat: implement user authentication module
- Backend (FastAPI):
  - External API authentication (pj-auth-api.vercel.app)
  - JWT token validation with Redis session storage
  - RBAC with department isolation
  - User, Role, Department models with pjctrl_ prefix
  - Alembic migrations with project-specific version table
  - Complete test coverage (13 tests)

- Frontend (React + Vite):
  - AuthContext for state management
  - Login page with error handling
  - Protected route component
  - Dashboard with user info display

- OpenSpec:
  - 7 capability specs defined
  - add-user-auth change archived

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 23:41:37 +08:00

3.3 KiB
Raw Blame History

ADDED Requirements

Requirement: API-Based Authentication

系統 SHALL 限定使用外部認證 API (https://pj-auth-api.vercel.app) 進行登入認證,不支援其他認證方式。

Scenario: API 登入成功

  • GIVEN 使用者擁有有效的企業帳號
  • WHEN 使用者透過前端提交憑證
  • THEN 系統呼叫 https://pj-auth-api.vercel.app 驗證憑證
  • AND 驗證成功後建立 session 並回傳 JWT token

Scenario: API 登入失敗

  • GIVEN 使用者提供無效的憑證
  • WHEN 使用者嘗試登入
  • THEN 認證 API 回傳錯誤
  • AND 系統拒絕登入並顯示錯誤訊息
  • AND 記錄失敗的登入嘗試

Scenario: 認證 API 無法連線

  • GIVEN 認證 API 服務無法連線
  • WHEN 使用者嘗試登入
  • THEN 系統顯示服務暫時無法使用的訊息
  • AND 記錄連線失敗事件

Requirement: System Administrator

系統 SHALL 預設一個系統管理員帳號,擁有所有權限。系統管理員帳號必須存在於外部認證系統,且登入流程仍需透過外部認證 API不允許本地繞過認證。

Scenario: 預設管理員帳號

  • GIVEN 系統初始化完成
  • WHEN 系統啟動
  • THEN 存在預設管理員帳號 ymirliu@panjit.com.tw
  • AND 該帳號擁有 super_admin 角色
  • AND 該帳號不可被刪除或降級

Scenario: 管理員登入流程

Scenario: 管理員全域權限

  • GIVEN 管理員帳號 ymirliu@panjit.com.tw 已通過 API 認證並登入
  • WHEN 管理員存取任何資源
  • THEN 系統允許存取,無視部門隔離限制

Requirement: Role-Based Access Control

系統 SHALL 支援基於角色的存取控制 (RBAC)。

Scenario: 角色權限檢查

  • GIVEN 使用者被指派特定角色
  • WHEN 使用者嘗試存取受保護的資源
  • THEN 系統根據角色權限決定是否允許存取

Scenario: 角色指派

  • GIVEN 管理員擁有使用者管理權限
  • WHEN 管理員為使用者指派角色
  • THEN 系統更新使用者的角色設定
  • AND 新權限立即生效

Requirement: Department Isolation

系統 SHALL 實施部門級別的資料隔離,確保跨部門資料安全。

Scenario: 部門資料隔離

  • GIVEN 使用者屬於研發部門
  • WHEN 使用者嘗試存取廠務部門的專案
  • THEN 系統拒絕存取並顯示無權限訊息

Scenario: 跨部門專案存取

  • GIVEN 專案被設定為跨部門可見
  • WHEN 不同部門的使用者嘗試存取該專案
  • THEN 系統根據專案的 Security_Level 設定決定是否允許存取

Requirement: Session Management

系統 SHALL 管理使用者 session包含過期與登出機制。

Scenario: Session 過期

  • GIVEN 使用者已登入系統
  • WHEN Session 超過設定的有效期限
  • THEN 系統自動使 session 失效
  • AND 使用者需重新登入

Scenario: 主動登出

  • GIVEN 使用者已登入系統
  • WHEN 使用者執行登出操作
  • THEN 系統銷毀 session 並清除 token