設計正本: ADR-0006 §3.1 / §3.2 / §3.4 / §3.5。親 tracker は別途 sub-issue 紐付け。
現状 keycloak/src/main/java/.../TasksWebApiUserStorageProvider と UserAdapter は全メソッド TODO スタブ。これを実装する。
スコープ
- JDBC 配線: SPI から
users テーブルへ read(NO_CACHE、§3.5)
UserLookupProvider: getUserById(StorageId.externalId)/ getUserByUsername(= email)/ getUserByEmail。いずれも deleted_at IS NULL のみ返す
UserQueryProvider: searchForUserStream(ページング、Admin Console の user list)
UserRegistrationProvider:
addUser: Custom User Profile attribute(full_name_kana 等)経由で users へ insert、tenant 未所属で着地(§3.1)
removeUser: 実装済みの UserAnonymizationDomainService を 1 transaction で呼び出し、true 返却(§3.4)
UserAdapter:
- read:
full_name 等は read-only mapping
setEmail: Update-Email 到達検証後の write 戻し(users.email + version increment、@Version 楽観排他)。setFirstName/setLastName は no-op
credentialManager: 資格は Keycloak native store に委譲(§3.3、CredentialInputValidator 非実装)
受け入れ条件
注: full_name_kana の attribute 契約は realm 側 sub-issue(②)で定義。E2E 検証はテスト sub-issue(③)。
設計正本: ADR-0006 §3.1 / §3.2 / §3.4 / §3.5。親 tracker は別途 sub-issue 紐付け。
現状
keycloak/src/main/java/.../TasksWebApiUserStorageProviderとUserAdapterは全メソッド TODO スタブ。これを実装する。スコープ
usersテーブルへ read(NO_CACHE、§3.5)UserLookupProvider:getUserById(StorageId.externalId)/getUserByUsername(= email)/getUserByEmail。いずれもdeleted_at IS NULLのみ返すUserQueryProvider:searchForUserStream(ページング、Admin Console の user list)UserRegistrationProvider:addUser: Custom User Profile attribute(full_name_kana等)経由でusersへ insert、tenant 未所属で着地(§3.1)removeUser: 実装済みのUserAnonymizationDomainServiceを 1 transaction で呼び出し、true返却(§3.4)UserAdapter:full_name等は read-only mappingsetEmail: Update-Email 到達検証後の write 戻し(users.email+ version increment、@Version楽観排他)。setFirstName/setLastNameは no-opcredentialManager: 資格は Keycloak native store に委譲(§3.3、CredentialInputValidator非実装)受け入れ条件
getUserBy{Id,Username,Email}がusersから解決し、削除済(deleted_at)user を返さないsearchForUserStreamがページングで Admin Console list に表示addUserが tenant 未所属のusers行を作成(full_name_kanaは Custom User Profile attribute 経由)removeUserがUserAnonymizationDomainServiceを呼び匿名化 +true返却setEmailがusers.emailへ write 戻し + 楽観排他(競合時エラー)CredentialInputValidatorは実装しない注:
full_name_kanaの attribute 契約は realm 側 sub-issue(②)で定義。E2E 検証はテスト sub-issue(③)。