---
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` 폴더 내에 디렉토리를 만들 수 있게 됩니다.
