---
url: /ja/guides/access.md
---
# アクセス制御

Memoh のアクセス制御は 2 つの層に分かれています:

* **チャネルメンバー**: Telegram、Discord、Feishu、QQ などの IM チャネルから来るアイデンティティを制御します。
* **ワークスペースメンバー**: クライアントとワークスペースにおける Memoh の登録ユーザーを制御します。

従来の ACL ルールモデルも引き続き存在しますが、現在は主にチャネルのチャット権限の裏側で動く高度なエンジンという位置付けです。日常的な設定は、Bot の **アクセス** タブから、**チャネルメンバー** と **ワークスペースメンバー** の 2 つの入口を使って始めるのがよいでしょう。

***

## 基本モデル

| 層 | アイデンティティ | 制御する内容 |
|------|------|----------|
| **チャネルメンバー** | IM プラットフォーム上で観測されたチャネルアイデンティティ | そのプラットフォーム上のアイデンティティが Bot とチャットできるか、そして IM コマンドで Bot を管理できるか |
| **ワークスペースメンバー** | Memoh の登録ユーザーアカウント | そのユーザーがクライアントで Bot を使えるか、ファイルを読み書きできるか、ワークスペースコマンドを実行できるか、Bot の設定を管理できるか |

この 2 つの層は、アカウント連携でつなげられます。ワークスペースのユーザーは **Profile -> Connected Accounts** でワンタイムコードを生成し、IM でいずれかの Memoh Bot に `/link <code>` を送ることで、そのメッセージを送ったチャネルアイデンティティを自分の Memoh アカウントに連携できます。

連携そのものはアクセス権限を付与しません。アイデンティティをつなぐ役割だけを担います。実際の権限は、あくまでチャネルメンバー、ワークスペースメンバー、Bot のオーナー、またはシステム管理者という立場から来ます。

***

## クイックスタート

### 任意の IM ユーザーにチャットを許可する

1. Bot の **アクセス** タブを開きます。
2. **チャネルメンバー** に進みます。
3. **アクセスモード** を **ブラックリストモード** に設定します。
4. メンバーリストは空のままにするか、ブロックしたいアイデンティティだけを追加します。

ブラックリストモードは、ACL のデフォルト効果が `allow` であることを意味します。拒否ルールにマッチしない限り、誰でもチャットできます。

### 指定した IM アイデンティティだけを許可する

1. **チャネルメンバー** を開きます。
2. **アクセスモード** を **ホワイトリストモード** に設定します。
3. アクセスを許可するチャネルアイデンティティを追加します。
4. 許可する各アイデンティティで **チャット** のチェックを維持します。

ホワイトリストモードは、ACL のデフォルト効果が `deny` であることを意味します。許可ルールにマッチしたアイデンティティだけがチャットできます。

### Web ユーザーに権限を与える

1. **ワークスペースメンバー** を開きます。
2. 特定のメンバーを追加するか、**すべてのメンバー** を追加します。
3. そのメンバーに持たせたい権限を選びます。

ワークスペースアクセスは Memoh の登録ユーザー向けです。ユーザーが自分の IM アイデンティティを連携しない限り、IM のチャット権限とは別物です。

***

## チャネルメンバー

チャネルメンバーは、IM 側のアクセス制御の入口です。

1 行が 1 つの**チャネルアイデンティティ**（1 人の Telegram ユーザーや Discord メンバー）、または 1 つの**グループチャット**（後述）を表します。メンバーはカードヘッダーのインライン選択から追加でき、個人のアイデンティティとグループチャットの候補は同じドロップダウン内にセクション分けで表示されます。各行には互いに独立した 2 つの権限があります:

| 権限 | 意味 |
|------|------|
| **チャット** | その IM アイデンティティから届く受信メッセージが Bot をトリガーできるかを制御します。 |
| **管理** | そのアイデンティティが IM のスラッシュコマンドで Bot を管理できるかを制御します。管理権限が自動的にチャット権限を与えることはありません。 |

### チャット

チャットのチェックボックスの裏側にあるのは、`chat.trigger` の ACL ルールです。

**ブラックリストモード**では:

* デフォルトは `allow` です
* アイデンティティを追加する、またはチャットのチェックを外すと、拒否ルールが作成されます
* チャットにチェックを入れると、そのアイデンティティの拒否ルールが削除されます

**ホワイトリストモード**では:

* デフォルトは `deny` です
* アイデンティティを追加する、またはチャットにチェックを入れると、許可ルールが作成されます
* チャットのチェックを外すと、そのアイデンティティの許可ルールが削除されます

### 管理

管理のチェックボックスは、そのチャネルアイデンティティに対するローカルの Channel Access オーバーライドを書き込みます。

管理権限は IM コマンドで使われます。これにより、あるチャネルアイデンティティが owner レベルのスラッシュコマンドフローで Bot の管理者として振る舞えるようになります。チャット権限とは意図的に切り離されています: あるアイデンティティが管理権限を持っていても、チャットがオフだったり ACL が拒否していたりすれば、その通常のチャットメッセージは引き続きブロックされます。

### グループチャットをメンバーにする

個別のアイデンティティのほかに、**グループチャット**全体を 1 行のメンバーとして追加することもできます。グループチャットの候補は Bot が各チャネルで観測した会話から来ており、行には「グループ」バッジが付きます。

* グループ行の**チャット**チェックボックスは「このグループにいる全員」を意味します——ホワイトリストモードではグループ全体を許可し、ブラックリストモードではグループ全体をブロックします。
* **グループに管理権限はありません。** 管理者は常に個別のチャネルアイデンティティです。
* 「この人が、このグループの中で」のような組み合わせを表現したい場合は、引き続き高度な ACL ルールを使います。

### プラットフォームメンバー

あるチャネルアイデンティティがこの Bot のワークスペースメンバーに連携済みの場合、その行はプラットフォームメンバーとしてマークされます。

対応するワークスペースメンバーが **ワークスペースメンバー** で **管理** 権限を持っているとき、そのチャネルアイデンティティは自動的に管理権限を継承します。チャネルメンバーの行には、この管理権限が継承によるものだと表示されます。チャネルメンバー側で管理権限を切り替えると、Memoh はローカルオーバーライドを書き込みます:

* ローカルで**オン**にすると、そのチャネルアイデンティティに管理権限を強制的に与えます
* ローカルで**オフ**にすると、そのチャネルアイデンティティが継承した管理権限を抑制します
* **継承に戻す**と、ローカルオーバーライドが削除され、再びワークスペースメンバーの権限に従います

チャネルメンバーから削除できるのは、純粋にローカルなチャネル行だけです。プラットフォームメンバーの行はアカウント連携から来るものなので、権限設定か連携の解除によって管理してください。

***

## ワークスペースメンバー

ワークスペースメンバーは、Web／ワークスペース側のアクセス制御の入口です。

権限を与えられる対象は次のとおりです:

* **特定のメンバー**
* **すべてのメンバー**

Bot のオーナーは暗黙の owner エントリとして表示され、常に完全な権限を持ちます。システム管理者も完全な権限として解決されます。

ワークスペースの権限は次のとおりです:

| 権限 | 許可される操作 |
|------|------------|
| **チャット可** | Web のチャット画面で Bot を使う。 |
| **ファイル読み取り** | Bot ワークスペースのファイルを読む。 |
| **ファイル書き込み** | Bot ワークスペースのファイルを変更する。ファイル読み取りも暗黙的に含まれます。 |
| **コマンド実行** | ワークスペースの実行フローを実行する。 |
| **管理可** | Bot の設定とアクセス制御を管理する。他のすべてのワークスペース権限を暗黙的に含みます。 |

ワークスペースの管理権限は、チャネルメンバーにも流れ込みます。ワークスペースの管理権限を持つユーザーが Telegram のアイデンティティを連携すると、その Telegram アイデンティティはチャネル側で管理権限を継承します。

ワークスペースの**チャット可**は、チャネルの**チャット**と同じではありません。ワークスペースの権限はクライアントとワークスペース API を許可するもので、チャネルのチャット権限は ACL エンジンを通じて IM の受信メッセージを許可するものです。

***

## チャネルアイデンティティの連携

ユーザーは **Profile -> Connected Accounts** で IM アイデンティティを連携できます:

1. **Connect** をクリックします。
2. 生成された `/link <code>` コマンドをコピーします。
3. IM チャネルでいずれかの Memoh Bot にそれを送信します。
4. そのコードが、メッセージを送ったチャネルアイデンティティを現在の Memoh ユーザーアカウントに連携します。

重要な詳細:

* link code は 1 回限りで、短時間で期限切れになります
* 送信者がチャットの ACL で拒否されていても `/link <code>` は実行を許可されるため、ユーザーは未連携の状態から復帰できます
* 連携はアカウントレベルです: ワークスペースユーザーとチャネルアイデンティティをグローバルにつなぎます
* 連携そのものがチャットや管理の権限を与えることはありません

連携が完了すると、対応するチャネルメンバーの行がワークスペースの管理権限を継承できるようになります。

***

## アクセスモードと高度な ACL ルール

チャネルのチャットは ACL エンジンを使います。アクセスページはそれを、**アクセスモード**と任意の高度なルールという形で見せています。

| アクセスモード | ACL のデフォルト効果 | 実際に結果へ影響するルール |
|----------|--------------|--------------------|
| **ブラックリストモード** | `allow` | `deny` ルール |
| **ホワイトリストモード** | `deny` | `allow` ルール |

デフォルトモードを上書きするのは、現在のデフォルト効果と逆のルールだけです。デフォルトと同じ効果のルールは、結果を変えません。

高度なルールのターゲットには次を指定できます:

* すべてのユーザー
* 特定のプラットフォーム上のすべてのユーザー
* 特定のチャネルアイデンティティ
* 特定のプラットフォーム上の特定のチャネルアイデンティティ

高度なルールのスコープには次を指定できます:

* 任意のチャット
* プライベートチャット
* グループチャット
* トピック／スレッド
* 特定の会話 ID
* 特定の thread ID

プラットフォームの絞り込みはルールのターゲットが担当し、会話と thread の絞り込みはソースのスコープが担当します。

従来の ACL ドキュメントと違い、現在のバージョンには手動のルール優先度やドラッグによる並べ替えはありません。「現在のデフォルトモード + マッチした逆効果のルール」という形で理解してください。

***

## 作成時のプリセット

Bot の作成時に選ぶ ACL プリセットは、チャネルのチャット挙動を初期化するだけです。後から **チャネルメンバー** で変更できます。

| プリセット | 初期挙動 |
|------|----------|
| `allow_all` | デフォルト効果 `allow`。追加のルールは作成しない |
| `private_only` | デフォルト効果 `deny`。プライベートチャットを許可 |
| `group_only` | デフォルト効果 `deny`。グループチャットを許可 |
| `group_and_thread_only` | デフォルト効果 `deny`。グループチャットと thread を許可 |
| `deny_all` | デフォルト効果 `deny`。追加の許可ルールは作成しない |

プリセットはワークスペースメンバーを設定せず、アカウント連携も作成しません。

***

## 例

### 公開 IM Bot で、少数だけブロックする

チャネルメンバーで**ブラックリストモード**を使います。チャットはデフォルトで開いたままにし、ブロックしたいアイデンティティだけを追加します。プラットフォーム全体や、特定のグループ／thread のコンテキストをブロックする必要があるときにだけ、高度なルールを使います。

### プライベート IM Bot

チャネルメンバーで**ホワイトリストモード**を使います。許可するチャネルアイデンティティを追加し、チャットのチェックを維持します。同じ人たちに IM から Bot を管理させたい場合は、あわせて管理権限を与えます。

### Web チーム Bot

**ワークスペースメンバー**を使います。特定のユーザーか、すべてのメンバーを追加し、Web／ワークスペースでの役割に応じてチャット可、ファイル権限、コマンド実行、管理権限を選びます。

### ワークスペース管理者が Telegram からも管理する

ワークスペースメンバーでそのユーザーに**管理可**を与えます。ユーザーに `/link <code>` で Telegram アカウントを連携してもらいます。その Telegram アイデンティティは、チャネルメンバーで管理権限を継承します。そのアイデンティティの Telegram 側の管理能力だけを無効にしたい場合は、チャネルメンバーで管理権限をオフにしてローカルオーバーライドを作成します。

***

## トラブルシューティング

アクセスの結果が予想と違うときは、次の順に確認してください:

1. **どちらの層が関係しているか。** IM のメッセージはチャネルのチャット ACL を通り、クライアントとワークスペース API はワークスペースメンバーを通ります。
2. **アイデンティティは連携済みか。** Connected Accounts が、ワークスペースの管理権限をチャネルメンバーに継承できるかを決めます。
3. **現在のチャネルのアクセスモードは何か。** ブラックリストモードはデフォルトで許可、ホワイトリストモードはデフォルトで拒否です。
4. **管理権限は継承か、オーバーライドか。** チャネルメンバーの情報ポップオーバーに、管理権限がワークスペースメンバーに従っているのか、ローカルで上書きされているのかが表示されます。
5. **`/access` は何を表示しているか。** IM では、`/access` が現在のアイデンティティ、書き込み権限、送信者のチャット ACL コンテキストを表示します。

管理とチャットは別物だということを覚えておいてください。管理権限は owner レベルの IM コマンドを許可できますが、通常の受信チャットは、チャネルのチャット権限が送信者を許可していなければ通りません。
