**`docs/01_code_definition/05_user.md`** # ユーザー定義 ## 概要 システムにログインするためのユーザー情報を管理する。 従事者マスタ(employees.json)とは別に、ログイン専用の情報を持つ。 **個人事業(SPS)と法人(SCSPS)のユーザーを一元管理する。** ## ユーザーID 従事者ID(SPS-ID)と同じものを使用する。 → 詳細は `03_id_generation.md` 参照 ## データ構造 | フィールド | 型 | 必須 | 説明 | |-----------|-----|------|------| | userId | string | ✅ | SPS-ID(例:SPS01-00001) | | password | string | ✅ | ログインパスワード(ハッシュ化) | | name | string | ✅ | 表示名(従事者マスタからコピー) | | status | string | ✅ | active / inactive | | forceChange | boolean | ✅ | 初回ログイン時などにパスワード変更を強制するか | ## ステータス | 値 | 説明 | |----|------| | active | ログイン可能 | | inactive | ログイン不可(退職者など) | ## パスワードポリシー - 初期パスワードは別途通知 - 初回ログイン時に `forceChange: true` で強制変更 - パスワードはハッシュ化して保存 ## 従事者マスタとの関係 - ユーザー情報(users.json)と従事者情報(employees.json)は `userId` = `SPS_ID` で紐付く - 権限は従事者マスタの `permissions` フィールドで管理する(users.jsonには権限情報を含めない) - ログイン時は users.json で認証後、employees.json から権限を取得する ## 保存場所 `/master/users.json`(統合) --- ## 6. セッション管理(各画面でのユーザー表示) ### 6.1 基本方針 - ログイン成功後、ユーザー情報を sessionStorage に保存する - 各画面では sessionStorage から情報を取得して右上にユーザー名を表示する - 権限情報はシステム権限(全社共通)と案件権限(案件ごと)に分離する ### 6.2 sessionStorage のキーとデータ構造 | 項目 | 内容 | |------|------| | キー名 | `sps_user` | | 保存タイミング | ログイン成功時(login.html) | **データ構造(現状):** ```json { "userId": "SPS01-00001", "name": "真柴直也" } ``` **データ構造(権限マスタ完成後):** ```json { "userId": "SPS01-00001", "name": "真柴直也", "systemPermissions": { "company_access_sps": true, "company_access_scsps": true, "accounting_view": true, "accounting_edit": true, "labor_view": true } } ``` ### 6.3 各画面でのユーザー名表示(共通関数) 全画面(会計・案件管理・労務管理・営業管理等)の右上ユーザー表示エリアに以下の関数を実装する。 ```javascript function setUserName() { const userNameDiv = document.getElementById('companyDisplay'); try { const currentUser = JSON.parse(sessionStorage.getItem('sps_user') || '{}'); userNameDiv.textContent = currentUser.name || currentUser.userId || 'ゲスト'; } catch(e) { userNameDiv.textContent = 'ゲスト'; } } ``` **表示ルール:** - `name` があれば表示 - `name` がなければ `userId` を表示 - どちらもなければ「ゲスト」を表示 ### 6.4 システム権限と案件権限の分離 | 権限種別 | 内容 | 保存場所 | 取得タイミング | |---------|------|---------|---------------| | システム権限 | 会計編集可、従事者閲覧可など全社共通 | sessionStorage(`systemPermissions`) | ログイン時 | | 案件権限 | 案件ごとの閲覧・編集・経費承認権限 | サーバー(案件マスタ) | 案件画面表示時(都度API) | **システム権限変更時の対応:** - 管理者が従事者マスタ(employees.json)の権限を変更 - 対象ユーザーに再ログインを案内 - 再ログイン時に最新の権限情報を sessionStorage に保存 **案件権限の管理:** - 案件管理担当の設計範囲とする - 案件ごとに調査員リストで管理 - 画面表示時に都度APIで取得する(sessionStorageには保存しない) ### 6.5 HTML側の実装要件 ユーザー名を表示する各HTMLファイルには以下の要素が必要: ```html