﻿# 09-C側顧客アクセス権限インターフェース

## 1. ドキュメントの位置付け

本ドキュメントは、C 側の顧客が HOME VISTA コンテンツにアクセスする際に、アクセス権限インターフェースが当該顧客のアクセス可能なコンテンツをどのように返すかを定義する。

本ドキュメントは C 側の能力要件であり、`05C-顾客权限页.md` には属さない。`05C` は、B 側の管理ページが顧客タグ、テンプレート権限、個人権限追加をどのように表示・編集するかのみを定義する。本ドキュメントは、顧客が実際にコンテンツページにアクセスする際に、インターフェースがこれらの設定をどのように使用するかを定義する。

関連ドキュメント:

- `03-标签权限模板.md`: タグ権限テンプレートの設定とテンプレート有効ルールを定義する。
- `bak-04-第三方字段映射与权限判定.md`: 今回のフェーズではサードパーティマッピングページを開発しないこと、および `customer_status` がどのように VISTA 顧客タグを補完するかを定義する。
- `05C-顾客权限页.md`: B 側の顧客権限編集ページを定義する。
- `04-统一顾客联动同步流程.md`: 同期、フィールドスナップショット、`customer_status` タグ設定、権限変更境界を定義する。
- `08-KASIKA入口页与VISTA首次访问开户.md`: C 側の初回開設と初期権限判定エントリーを定義する。

## 2. ページとインターフェースの目標

- C 側の顧客が HOME VISTA コンテンツページにアクセスする際、インターフェースは顧客の現在の権限に基づいてアクセス可能なコンテンツを返す。
- インターフェースは、顧客が現在保有する VISTA タグがヒットする権限テンプレートの和集合を必ず組み込まなければならない。
- インターフェースは、顧客の個人権限追加を引き続きサポートしなければならない。
- インターフェースは、顧客の単独権限のみを読み取ることはできず、タグテンプレートの和集合を無視してもならない。
- タグ、テンプレート、個人権限追加が変更された後、次回の C 側アクセスインターフェースリクエストは最新の設定に基づいて返されなければならない。

## 3. 計算入力

インターフェースは少なくとも以下の入力を使用する:

- 現在アクセスしている顧客の VISTA 顧客 ID。
- 当該顧客が現在保有する VISTA タグ集合。
- タグの現在の状態。
- タグに対応する権限テンプレート。
- 顧客の個人権限追加。

## 4. 計算ルール

1. 顧客が現在保有する VISTA タグを読み取る。
2. 権限テンプレートが設定されていないタグをフィルタリングする。
3. 残りのタグに対応する権限テンプレート内のアクセス可能なコンテンツ集合を取得する。
4. 複数のタグテンプレートがヒットしたアクセス可能なコンテンツの和集合を取る。
5. テンプレートの和集合に基づいて、顧客の個人権限追加コンテンツを上乗せする。
6. 最終的に C 側へ返すアクセス可能なコンテンツ = タグ権限テンプレートの和集合 + 個人権限追加。
7. 顧客がいずれかのタグ権限テンプレートにもヒットせず、個人権限追加もない場合、最終的なアクセス可能なコンテンツは空となる。
8. 間取り図、モデルルーム、資料、ナビゲーションメニューなどの既存の関連ルールは、最終権限集合の上で引き続き有効である。インターフェースは、あるコンテンツがタグテンプレートまたは個人追加に由来するからといって、既存の関連検証をスキップしてはならない。

## 5. インターフェースの返却要件

1. C 側インターフェースが返す間取り、モデル、資料、ナビゲーションメニューなどのアクセス可能なコンテンツは、最終的な権限結果に基づかなければならない。
2. 同じコンテンツが複数のタグテンプレートにヒットした場合、1 回のみ返却する。
3. C 側インターフェースは、権限の出所、タグ名、テンプレート名、`customer_status` の出所、または KASIKA customer_id を顧客に表示しない。
4. C 側インターフェースは、顧客がアクセス可能なコンテンツ結果のみを返す。権限の出所の要約と計算明細は、B 側の詳細ページ、権限ページ、またはログのみに使用される。
5. 権限の変更は、顧客のアクセス URL やアクセスパスワードを変更せず、その URL の背後にあるアクセス可能なコンテンツのみを変更する。

## 6. 例外とフォールバック

1. タグ権限テンプレートの設定に異常がある場合、インターフェースは権限を拡大してはならない。
2. 単一のタグテンプレートに異常がある場合、そのタグテンプレートは今回の権限の和集合に参加せず、ログを記録する。他のタグテンプレートは引き続き計算に参加できる。
3. すべてのタグテンプレートが利用不可であり、個人権限追加もない場合、権限を拡大せず、最終的なアクセス可能なコンテンツは空となる。
4. C 側インターフェースの異常通知は、内部タグ、テンプレート、`customer_status` タグ設定、または KASIKA 同期エラーの詳細を露出させてはならない。
5. C 側インターフェースのエラーは、ページ上に具体的な顧客 ID、KASIKA customer_id、または内部権限ルール名を表示すべきではない。

## 7. B 側設定との関係

1. B 側の `05C` が顧客タグまたは個人権限追加を変更した後、C 側インターフェースは最新の結果に基づいて計算する。
2. B 側の `03` がタグ権限テンプレートを変更した後、C 側インターフェースは最新のテンプレートに基づいて計算する。
3. `04` で定義された `customer_status` 同名タグ設定、`04` の同期フロー、または `08` KASIKA エントリーページのフローによって顧客タグが補完された後、C 側インターフェースは補完後の顧客タグに基づいて計算する。
4. 管理者が「履歴適用」や「一括適用」タスクを追加で実行する必要はない。

## 8. 受け入れ基準

1. 顧客が権限テンプレートを設定済みの複数のタグを保有する場合、C 側インターフェースは複数のタグ権限テンプレートの和集合を返す。
2. 顧客に個人権限追加コンテンツが存在する場合、C 側インターフェースはタグテンプレートの和集合にそのコンテンツを追加する。
3. 顧客権限ページは、タグテンプレート権限の個別除外をサポートしない。テンプレートがヒットしたコンテンツは、顧客レベルの除外項目によって差し引かれてはならない。
4. テンプレートの編集保存後、次回の C 側インターフェースリクエストは最新のテンプレートに基づいて返される。
5. `customer_status` タグ設定または同期フローによってタグが補完された後、次回の C 側インターフェースリクエストは最新の顧客タグに基づいて返される。
6. C 側インターフェースは、権限の出所の説明、タグの出所の説明、または KASIKA 内部情報を顧客ページに返さない。
7. タグ権限テンプレートにヒットせず、個人権限追加もない場合、最終的なアクセス可能なコンテンツは空となる。

## 9. ユーザーケース

### ケース 1: 複数タグテンプレートの和集合
- 前提: 顧客が `VIP` と `内見予定` の 2 つのタグを保有し、2 つのタグにはそれぞれ異なる権限テンプレートが設定されている。
- 操作: 顧客が C 側で HOME VISTA コンテンツページにアクセスする。
- 期待結果: インターフェースは 2 つのタグ権限テンプレートのアクセス可能なコンテンツの和集合を返す。重複コンテンツは 1 回のみ返す。

### ケース 2: 個人権限追加をタグの和集合に上乗せ
- 前提: 顧客が 1 つのタグ権限テンプレートを保有し、B 側で個人追加されたコンテンツが 1 つある。
- 操作: 顧客が C 側で HOME VISTA コンテンツページにアクセスする。
- 期待結果: インターフェースはタグテンプレートのコンテンツと個人追加コンテンツを返す。

### ケース 3: タグテンプレート権限は顧客レベルの除外で差し引かれない
- 前提: 顧客が 1 つのタグ権限テンプレートを保有し、テンプレートがコンテンツ A を付与している。
- 操作: 顧客が C 側で HOME VISTA コンテンツページにアクセスする。
- 期待結果: インターフェースはコンテンツ A を返す。今回のフェーズでは、顧客レベルの個別除外によってタグテンプレートのコンテンツを差し引かない。

### ケース 4: テンプレート変更後は即時反映される
- 前提: 管理者があるタグ権限テンプレートを変更・保存し、そのタグを対象顧客がすでに保有している。
- 操作: 顧客が再度 HOME VISTA コンテンツページにアクセスする。
- 期待結果: インターフェースは最新のテンプレートに基づいてアクセス可能なコンテンツを返す。管理者が別途一括適用する必要はない。

### ケース 5: タグ権限テンプレートがない場合は空の権限を返す
- 前提: 顧客がタグ権限テンプレートにヒットせず、個人権限追加もない。
- 操作: 顧客が HOME VISTA コンテンツページにアクセスする。
- 期待結果: インターフェースは空のアクセス可能なコンテンツ結果を返し、権限を拡大しない。