> ## Documentation Index
> Fetch the complete documentation index at: https://docs.diversion.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 詳細な権限

> リポジトリ内の特定のパスへのアクセスを制御

詳細な権限を使うと、リポジトリ内の特定のファイルおよびフォルダーに対して、きめ細かなアクセス制御を設定できます。ユーザーにリポジトリ全体へのアクセスを与える代わりに、パスレベルで読み取り、書き込み、マージ、管理を制限できます。

## 詳細な権限を使うべき場合

詳細な権限は、以下のような場合に便利です:

* **機密性の高いパスを保護**: セキュリティ上重要なコード、設定ファイル、本番アセットをチームメンバーが変更するのを防ぐ
* **役割で制限**: デザイナーはアセットのみを変更し、開発者はコードで作業できるようにする
* **コンポーネントを分離**: チームがリポジトリの特定の部分で作業でき、他の部分にはアクセスできないようにする

## アクセスレベル

Diversion は 4 つの階層型アクセスレベルを使用します:

| レベル       | 説明         |
| --------- | ---------- |
| **Admin** | 完全な制御      |
| **Write** | ファイルを変更可能  |
| **Merge** | マージ操作に参加可能 |
| **Read**  | ファイル閲覧のみ可能 |

アクセスレベルは階層型です: Admin は Write のすべての権限を含み、それは Merge を、それは Read を含みます。各レベルで何ができるかの詳細については、[アクセスレベル](/ja/basic/access-levels) を参照してください。

## 権限タイプ

各ルールは、アクセスがどのように付与または拒否されるかを制御する 4 つの権限タイプのいずれかを使用します:

| タイプ                      | 挙動                                                                                         |
| ------------------------ | ------------------------------------------------------------------------------------------ |
| **Allow (Hierarchical)** | 指定されたレベル **とすべての下位レベル** を付与します。例: Allow (Hierarchical) + Write は Write と Read アクセスを付与します。  |
| **Allow (Exact)**        | 指定された **正確なレベルのみ** を付与します。例: Allow (Exact) + Write は Write を付与しますが Read は付与しません。           |
| **Deny (All Above)**     | ルール評価を停止し、すべてのアクセスレベルを拒否します (レベルフィールドは無視されます)。より優先度の高いルール (テーブルで下位) によってすでに付与された権限は保持されます。 |
| **Deny (Exact)**         | 指定された **正確なレベルのみ** を拒否します。例: Deny (Exact) + Write は Write を拒否しますが Read を許可します。             |

<Tip>
  ほとんどの場合、自然な権限継承を付与する **Allow (Hierarchical)** を使用してください。他のレベルに影響を与えずに特定のレベルを付与または拒否する必要がある場合 (例: Write を拒否するが Read は維持) は、Exact タイプを使用します。
</Tip>

## パスパターン

パスパターンは、ルールが適用されるファイルを指定します。パターンは常に `/` で始まり、リポジトリルートを表します。

| ワイルドカード | 挙動                  |
| ------- | ------------------- |
| `*`     | 単一のディレクトリ内でのみ一致     |
| `...`   | すべてのサブディレクトリを再帰的に一致 |

以下は一般的なパターンです:

| パターン                | 一致対象                               |
| ------------------- | ---------------------------------- |
| `/path/to/file.txt` | 正確なファイル一致                          |
| `/path/...`         | `/path/` 配下のすべてのファイル (再帰)          |
| `/path/....py`      | `/path/` 配下のすべての `.py` ファイル (再帰)   |
| `/path/*`           | `/path/` 直下のすべてのファイル (サブディレクトリを除く) |
| `/path/prefix*`     | `/path/` 内の「prefix」で始まるファイル        |

## ルールの優先順位

ルールは **テーブルの下から上へ** 評価されます。複数のルールが一致する場合、**最高の権限が優先** されます — Deny ルールが評価を停止しない限り。

<Note>
  テーブルで下位のルールほど **優先度が高い** です。Deny ルールはその上の Allow ルールを上書きできます。
</Note>

### 例: 複数の Allow ルール

| # | ユーザー  | パス              | レベル   | タイプ                  |
| - | ----- | --------------- | ----- | -------------------- |
| 1 | alice | /src/...        | Write | Allow (Hierarchical) |
| 2 | alice | /src/secret/... | Read  | Allow (Hierarchical) |

Alice が `/src/secret/config.json` にアクセスするとき:

* 両方のルールが一致
* 最高の権限 (Write) が付与される
* **結果: Alice は `/src/secret/` 内のファイルに Write 可能**

### 例: Deny を使ってアクセスを制限

| # | ユーザー  | パス              | レベル   | タイプ                  |
| - | ----- | --------------- | ----- | -------------------- |
| 1 | alice | /src/...        | Write | Allow (Hierarchical) |
| 2 | alice | /src/secret/... | Write | Deny (All Above)     |

Alice が `/src/secret/config.json` にアクセスしようとしたとき:

1. ルール 2 が最初に一致 (下位、最高優先度) — 評価を停止し、すべてのアクセスを拒否する
2. ルール 1 は決して評価されない
3. **結果: Alice は `/src/secret/` 内のファイルにアクセス不可**

<Warning>
  **Deny (All Above)** は終端ルールです。一致すると評価は直ちに停止し、その上のルールは一切チェックされません。より優先度の高いルール (テーブルで下位) によってすでに付与された権限は保持されます。
</Warning>

UI ではルールをドラッグして並び替え、優先度を変更できます。

## 権限の割り当て

権限は以下に割り当てることができます:

* **個々のユーザー** - 特定のチームメンバーにルールを適用します
* **グループ** - グループのすべてのメンバーにルールを適用します (組織が必要)。個々のユーザーよりもグループを優先してください — チームが成長したときに権限の管理が楽になります。

各ルールは、ユーザーまたはグループのいずれか一方をターゲットにする必要があり、両方はできません。同じパターンを両方に適用する必要がある場合は、別々のルールを作成してください。

## 詳細な権限のセットアップ

<Steps>
  <Step title="組織設定を開く">
    上部ナビゲーションの **プロフィールアバター** をクリックし、**Your organizations** を選択します。
  </Step>

  <Step title="Permission rules に移動">
    サイドバーで **Repositories** を選択し、リポジトリ列で **Permission rules** を選択します。
  </Step>

  <Step title="リポジトリを選択">
    リポジトリ列上部のリポジトリピッカーを使って、設定したいリポジトリを選択します。
  </Step>

  <Step title="テーブルを編集">
    「Edit Table」をクリックして編集モードを有効にします。

    <Frame>
      <img src="https://mintcdn.com/diversion-2/BCtatdE_sQnev6Bc/images/granular-permissions/granular-permissions-table.gif?s=9cd09e466968ad004dbdee867c3f5f93" alt="ルールリストを表示する詳細な権限テーブル" width="1400" height="1479" data-path="images/granular-permissions/granular-permissions-table.gif" />
    </Frame>
  </Step>

  <Step title="ルールを追加">
    「Add Rule」をクリックして以下を設定します:

    * **User or Group**: このルールを適用する対象
    * **Path Pattern**: 影響を受けるファイル
    * **Access Level**: Admin、Write、Merge、または Read
    * **Permission Type**: アクセスレベルを適用する方法

    <Frame>
      <img src="https://mintcdn.com/diversion-2/BCtatdE_sQnev6Bc/images/granular-permissions/granular-permissions-add-rule.gif?s=c8d8604748a072f8509c4e3e6c2046b7" alt="新しい権限ルールの追加" width="1400" height="1479" data-path="images/granular-permissions/granular-permissions-add-rule.gif" />
    </Frame>
  </Step>

  <Step title="既存のルールを編集">
    ルールをドラッグして並び替え (テーブル下位のルールほど優先度が高い)、任意のフィールドを編集、または不要になったルールを削除できます。
  </Step>

  <Step title="変更を保存" />
</Steps>

## 評価ロジック

ユーザーがファイルにアクセスしようとしたとき:

1. そのユーザー (グループを含む) の、ファイルパスに一致するすべてのルールを見つける
2. 下から上へ (最高優先度から) ルールを評価する
3. 各ルールについて:
   * **Deny (All Above)** が要求されたレベルに一致する場合: 評価を停止する (以前に付与された権限は保持される)
   * **Deny (Exact)** が正確に一致する場合: 正確なレベルを拒否済みとマークし、評価を続行する
   * **Allow (Hierarchical)** または **Allow (Exact)** が一致する場合: 付与済みとマークし、続行する
4. 最終決定: 拒否が記録されていない限り、最高の付与された権限が優先される

<Info>
  **デフォルトの挙動:**

  * リポジトリに **詳細な権限ルールがない** 場合、ユーザーはリポジトリレベルの権限を取得します。
  * 誰かに対する **ルールが 1 つでも存在** すると、一致するルールがないユーザーは **すべてのアクセスが拒否** されます。アクセスが必要なすべてのユーザーに対してルールを追加するようにしてください。
</Info>

## API アクセス

[詳細な権限 API](/ja/api-reference/repository-granular-permissions/list-granular-permissions) を使って、詳細な権限をプログラム的に管理できます。
