前回は コチラ
※ 2021/09/13 時点で未完
ログインを実装してみよう
- 以下チュートリアルを行う
- 上記チュートリアルだとインメモリにアカウントレコードを登録し、そのレコードに対し認証を行う
- MySQL を使用するように設定変更を行う
- 設定変更をして動作確認ができるように、テーブル定義だけ先に行うことにした
テーブル定義
- 各テーブルについて所管を記述する
- 実際のテーブル定義書については後ほど公開するかも
- (少しずつ追記していきます)
アカウント情報
-
テーブル名は「Account」
-
spring-boot-starter-security
が提供してくれるアカウント情報テーブル(= User テーブル)の初期スキーマは以下- username:String
- ユーザー名称。DaoAuthenticationProvider に渡されて認証が行われる
- password:String
- パスワード。DaoAuthenticationProvider に渡されて認証が行われる
- enabled:boolean
- 論理削除フラグ。
- accountNonExpired:boolean
- アカウントの有効性フラグ。
- credentialsNonExpired:boolean
- 認証情報(通常はパスワード)の有効性フラグ。
- 最近の考え方だとパスワードの頻繁な変更は脆弱とのことなので、今はあまり使わないかな?
- パスワードを忘れた時の対処とかに流用できそう。
- accountNonLocked:boolean
- アカウントロックフラグ。
- authorities:Collection extends GrantedAuthority>
- 役割。
- 一旦 String 配列で持ったあと、
createAuthorityList()
で GrantedAuthority の List 化 - チュートリアル中だと、
WebSecurityConfig#userDetailsService()
のUser.role("USER")
で実行される
- username:String
-
上記初期スキーマの内容で十分なので、このままテーブルを作成する
- 作成日、最終更新日ぐらいは追加しておく
-
ちなみに
org.springframework.security.core.userdetails.User
エンティティクラスを提供してくれているので、使い方は Javadoc を参照- 実装する際には一応継承して自作クラスを使用しようね
役割
- DB にテーブルは作らない
- enum 型にして静的に持つことにした
- 取り得る値は以下
- ROLE_USER
- 一般ユーザー
- ROLE_ADMIN
- 管理者
- ROLE_USER
- 今の所、各役割で動作の振る舞いは変わらない。気が向いたらどこかの画面の実装で出し分けしてみる
- 役割テーブルを作って DB に格納 → アプリケーション起動時にメモリに格納 → 静的に運用、も考えたけど保持する情報が文字列だけなので不要と判断
- 各役割ごとに実施できる機能も DB で管理するならアリ
エージェント
- テーブル名は「Agent」
- スキーマは以下を想定
- id:sequence
- PK。
- name:String
- エージェント名称(会社名)
- top_url:String
- トップページURL
- login_url:String
- ログインURL
- id:sequence
エージェント担当者
- テーブル名は「AgentRecruiter」
- スキーマは以下を想定
- id:sequence
- PK。
- agent_id:int
- Agent テーブルの ID(外部キー)
- name:String
- 担当者名
- email:String
- メールアドレス
- id:sequence
企業
- テーブル名は「Company」
- スキーマは以下を想定
- id:sequence
- PK。
- name:String
- 企業名称
- corporate_url:String
- コーポレートサイトの URL
- recruit_url:String
- 採用サイトの URL
- id:sequence
企業の求人票
- テーブル名は「CompanyJobPosting」
企業のマークダウン形式メモ
- テーブル名は「CompanyMarkdown」
企業の評価ポイント
- テーブル名は「CompanyEvaluationStandard」
選考ステップ
- DB にテーブルは作らない
- enum 型にして静的に持つことにした
- 取り得る値は以下
- IN_BOX
- 候補
- SCREENING
- 書類選考
- PRIMARY
- 一次選考
- SECONDARY
- 二次選考
- FINAL
- 最終選考
- IN_BOX
- 選考ステップの中に後述の「選考ステータス」を持つ
選考ステータス
- DB にテーブルは作らない
- enum 型にして静的に持つことにした
- 取り得る値は以下
- NEW
- 新規作成
- IN_PLANNING
- 計画中・準備中
- NOT_READY
- 実施予定なし
- WAITING
- 待機中
- READY
- 準備完了
- IN_PROGRESS
- 実施中
- PENDING
- 保留中
- REJECTED
- 拒否
- CANCELED
- キャンセル
- COMPLETED
- 完了
- NEW
メモ
-
エンティティから DDL を自動生成し実行してくれるオプション
- spring.jpa.hibernate.ddl-auto=***
-
エンティティから DDL を自動生成する だけ のプラグイン
- JPA Schema Generator Plugin
-
エンティティで使用するアノテーション一覧
-
DB のスキーマを HTML で出力
-
Draw.io で ER 図を描ける