---
title: アクセス権　permissions
sidebar:
  order: 2
i18nReady: true
---

「アクセス権」（Permissions）とは、明示化されたコマンド特権の内容説明です。

```toml
[[permission]]
identifier = "my-identifier"
description = "This describes the impact and more."
commands.allow = [
    "read_file"
]

[[scope.allow]]
my-scope = "$HOME/*"

[[scope.deny]]
my-scope = "$HOME/secret"
```

これにより、Tauri アプリケーションのフロントエンドでコマンドにアクセスできるようになります。
また、「適用範囲」（スコープ）をコマンドに割り当て、どのコマンドが有効化されるのかを指定できます。
「アクセス権」では、特定のコマンドを有効化または無効化したり、「適用範囲」を定義したり、あるいはその両方を組み合わせたりすることができます。

「アクセス権」は、新しい「識別子」の下に一組のセットとしてグループ化できます。
これは「アクセス権セット」と呼ばれ、これにより、「適用範囲」関連のアクセス権を「コマンド」関連のアクセス権と組み合わせることができます。また、「操作」固有のアクセス権をより使いやすいセットにグループ化またはバンドルすることもできます

プラグイン開発者であれば、公開されているすべてのコマンドに対して、複数の定義済みで適切な名前を付与したアクセス権を配布できます。

アプリケーション開発者の場合は、既存のプラグイン・アクセス権を拡張したり、個人設定のコマンド用に定義したりできます。これらは、後で再利用したり、メインの設定ファイルを簡素化したりするために、ひとつのセットとしてグループ化または拡張できます。

## アクセス権識別子

「アクセス権識別子」は、アクセス権を再利用して一意の名前を持つことを保証するために使用されます。

:::tip

「**名前**」を用いて、`tauri-plugin-`というプレフィックス（接頭辞）を付けることなくプラグイン・クレート名を参照します。これは、「名前」が競合する可能性を減らすための「名前空間」として意図されています。アプリケーション自体のアクセス権を参照する場合は、必要ありません。

:::

- `<name>:default` ：　これは、アクセス権がプラグインまたはアプリケーションのデフォルトであることを示しています。
- `<name>:<command-name>` これは、アクセス権が個々のコマンド用であることを示しています。

プラグインのプレフィックス `tauri-plugin-` は、コンパイル時にプラグインの識別子の先頭に自動的に追加されるため、手動で指定する必要はありません。

識別子は ASCII 文字のアルファベット小文字 `[a-z]` に制限されており、識別子の最大長（文字数）は下記の定数により現在 `116` に制限されています。

```rust
const IDENTIFIER_SEPARATOR: u8 = b':';
const PLUGIN_PREFIX: &str = "tauri-plugin-";

// https://doc.rust-lang.org/cargo/reference/manifest.html#the-name-field
const MAX_LEN_PREFIX: usize = 64 - PLUGIN_PREFIX.len();
const MAX_LEN_BASE: usize = 64;
const MAX_LEN_IDENTIFIER: usize = MAX_LEN_PREFIX + 1 + MAX_LEN_BASE;
```

## 設定ファイル

Tauri **プラグイン** ディレクトリ構造の簡略化された例：

```sh
tauri-plugin
├── README.md
├── src
│  └── lib.rs
├── build.rs
├── Cargo.toml
├── permissions
│  └── <identifier>.json/toml
│  └── default.json/toml
```

デフォルトのアクセス権は、特別な方法で処理されています。というのも、Tauri CLI を使用して Tauri アプリケーションにプラグインを追加する限り、アプリケーション設定に自動的に追加されますので。

**アプリケーション** 開発者の場合も構造は同様です：

```sh
tauri-app
├── index.html
├── package.json
├── src
├── src-tauri
│   ├── Cargo.toml
│   ├── permissions
│      └── <identifier>.toml
|   ├── capabilities
│      └── <identifier>.json/.toml
│   ├── src
│   ├── tauri.conf.json
```

:::note[（注記）]

アプリケーション開発者である場合、設定ファイルは `json` / `json5` または `toml` で記述できますが、「アクセス権」は `toml` 内でのみ定義可能です。

:::

## 実施例

`File System` プラグインからの「アクセス権」設定例：

```toml title="plugins/fs/permissions/autogenerated/base-directories/home.toml"
[[permission]]
identifier = "scope-home"
description = """This scope permits access to all files and
list content of top level directories in the `$HOME`folder."""

[[scope.allow]]
path = "$HOME/*"
```

> > > 《訳注》　上記 description の内容：　この適用範囲は、`$HOME` フォルダー内のすべてのファイルとリスト内容へのアクセスを許可します。

```toml title="plugins/fs/permissions/read-files.toml"
[[permission]]
identifier = "read-files"
description = """This enables all file read related
commands without any pre-configured accessible paths."""
commands.allow = [
    "read_file",
    "read",
    "open",
    "read_text_file",
    "read_text_file_lines",
    "read_text_file_lines_next"
]
```

> > > 《訳注》　上記 description の内容：　これにより、事前に設定されたアクセス可能なパスなしで、すべてのファイル読み取り関連コマンドが有効になります。

```toml title="plugins/fs/permissions/autogenerated/commands/mkdir.toml"
[[permission]]
identifier = "allow-mkdir"
description = "This enables the mkdir command."
commands.allow = [
    "mkdir"
]
```

> > > 《訳注》　上記 description の内容：　これにより、「mkdir」コマンドが有効になります。

アプリで上記のプラグインアクセス権を拡張する実装例：

```toml title="my-app/src-tauri/permissions/home-read-extends.toml"
[[set]]
identifier = "allow-home-read-extended"
description = """ This allows non-recursive read access to files and to create directories
in the `$HOME` folder.
"""
permissions = [
    "fs:read-files",
    "fs:scope-home",
    "fs:allow-mkdir"
]
```

> > > 《訳注》　上記 description の内容：　これにより、ファイルへの非再帰的な読み取りアクセスが可能になり、`$HOME` フォルダー内にディレクトリを作成できるようになります。

<div style="text-align: right;">
  【※ この日本語版は、「Feb 22, 2025 英語版」に基づいています】
</div>
