# 管理員找得到文章，客戶也一定看得到嗎？

按本例可見政策比較未登入、客戶及同事的文章清單。

## 每次核覆蓋都寫清讀者身分

本例文件分 public、signed-in、staff 三類。未登入只見 public；客戶見 public 及 signed-in；同事三類都見。文章權限未明便待核。角色只是本例規則，不代表真實帳戶權限或安全認證。

已填文章可見對照

| 文章 | 可見類別 | 未登入 | 客戶 | 同事 |
| --- | --- | --- | --- | --- |
| A1 | public | 可見 | 可見 | 可見 |
| A2 | signed-in | 不可見 | 可見 | 可見 |
| A3 | staff | 不可見 | 不可見 | 可見 |

## 存取權限與指引適用性分開

未登入搜尋只可用 A1；本地測試身分改為客戶便多 A2。員工搜尋有 A3，不能證明客戶也讀到。可見也不代表指引符合今次工作及版本。

1. 列真正讀者
2. 逐篇套可見規則
3. 保留不可見及未明
4. 適用性另核

管理員看得較多，不能拿他的清單代客戶測試。

以客戶身分，哪幾篇可見？

A1、A2；A3 按本例仍只供同事看。

## 權限未明先留待核

素材用同一文章清單比較未登入及客戶。A2 的可見類別改 null 時，A1 可見、A2 待核，不猜公開或不可見。

模型只接本例三種讀者及可見類別，文章類別另可用 null。最多 30 篇且編號不重複。不在這裏登入、擴大權限、取得隱藏文字或模擬供應商管理員特權。

確認讀者取得文件後，再用適用性教材核工作與版本。真正文件整合的存取控制也須在語言模型以外執行。

## 完整本地記錄與逐項結果

```json
{
  "issuer": "Astera Technology",
  "resource": "ops-help-reader-permission-search",
  "locale": "zh-HK",
  "contract": "本例文件分 public、signed-in、staff 三類。未登入只見 public；客戶見 public 及 signed-in；同事三類都見。文章權限未明便待核。角色只是本例規則，不代表真實帳戶權限或安全認證。",
  "input": {
    "reader": "anonymous",
    "articles": [
      {
        "id": "A1",
        "visibility": "public"
      },
      {
        "id": "A2",
        "visibility": "signed-in"
      },
      {
        "id": "A3",
        "visibility": "staff"
      }
    ]
  },
  "output": {
    "ok": true,
    "state": "complete",
    "result": {
      "visible": [
        "A1"
      ],
      "unknown": []
    },
    "trace": [
      {
        "id": "A1",
        "decision": "visible"
      },
      {
        "id": "A2",
        "decision": "hidden"
      },
      {
        "id": "A3",
        "decision": "hidden"
      }
    ]
  },
  "verificationCases": [
    {
      "name": "baseline",
      "input": {
        "reader": "anonymous",
        "articles": [
          {
            "id": "A1",
            "visibility": "public"
          },
          {
            "id": "A2",
            "visibility": "signed-in"
          },
          {
            "id": "A3",
            "visibility": "staff"
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "complete",
        "result": {
          "visible": [
            "A1"
          ],
          "unknown": []
        }
      }
    },
    {
      "name": "material-edit",
      "input": {
        "reader": "customer",
        "articles": [
          {
            "id": "A1",
            "visibility": "public"
          },
          {
            "id": "A2",
            "visibility": "signed-in"
          },
          {
            "id": "A3",
            "visibility": "staff"
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "complete",
        "result": {
          "visible": [
            "A1",
            "A2"
          ],
          "unknown": []
        }
      }
    },
    {
      "name": "fresh-boundary",
      "input": {
        "reader": "anonymous",
        "articles": [
          {
            "id": "A1",
            "visibility": "public"
          },
          {
            "id": "A2",
            "visibility": null
          },
          {
            "id": "A3",
            "visibility": "staff"
          }
        ]
      },
      "expected": {
        "ok": true,
        "state": "unknown",
        "result": {
          "visible": [
            "A1"
          ],
          "unknown": [
            "A2"
          ]
        }
      }
    }
  ],
  "meaningOfNull": "該欄位未知或沒有已建立的值；請按逐項結果判斷。",
  "businessSideEffects": false
}
```
