> For the complete documentation index, see [llms.txt](https://ouvretaferme.gitbook.io/ouvretaferme/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ouvretaferme.gitbook.io/ouvretaferme/authentification/scopes.md).

# Scopes

Un scope délimite ce qu'une clé API ou un jeton OAuth2 peut faire. Ils sont organisés en quatre domaines, chacun en lecture et en écriture. La référence indique sur chaque route le scope qu'elle exige.

| Scope                     | Sur l'écran Intégrations | Donne accès à                            |
| ------------------------- | ------------------------ | ---------------------------------------- |
| `general:read`            | Paramètres, lecture      | La structure, son équipe et ses réglages |
| `general:write`           | Paramètres, écriture     | Leur modification                        |
| `production:read`         | Production, lecture      | Les données de production                |
| `production:write`        | Production, écriture     | Leur création et leur modification       |
| `commercialisation:read`  | Vente, lecture           | Les données de commercialisation         |
| `commercialisation:write` | Vente, écriture          | Leur création et leur modification       |
| `accounting:read`         | Gestion, lecture         | Les données comptables                   |
| `accounting:write`        | Gestion, écriture        | Leur création et leur modification       |

## Les scopes proposés

Une structure ne se voit proposer que les scopes des domaines qu'elle utilise dans Ouvretaferme : une structure sans comptabilité n'a pas de scope `accounting`. Pendant la bêta, les scopes `:write` ne sont proposés qu'aux structures qui participent à la bêta de l'écriture.

* **Clé API personnelle.** L'administrateur choisit, pour chaque domaine, « Aucun accès », « Lecture » ou « Lecture et écriture ». L'écriture ne se donne donc jamais sans la lecture du même domaine.
* **OAuth2.** L'application ne peut demander que les scopes déclarés à son enregistrement, et la personne les accepte ou les refuse ensemble. Un scope `:write` n'ouvre pas la lecture : demandez aussi le scope `:read` du domaine si l'application doit lire.

Une route appelée sans le scope qu'elle exige répond `403` avec le code `scope_not_allowed`.

{% hint style="warning" %}
Ne demandez que les scopes dont votre intégration a réellement besoin.
{% endhint %}
