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

# Rôles et permissions

> Les rôles Solya POS, leur périmètre, et les permissions (scopes) qui protègent chaque action.

L'accès à Solya POS est gouverné par un contrôle d'accès basé sur les rôles
(RBAC). Un utilisateur détient un ou plusieurs **rôles**, chacun résolu à un
**périmètre**, et chaque rôle confère un jeu de **permissions**. Une action est
autorisée si le principal possède la permission qu'elle exige.

## Les rôles

Solya POS livre quatre rôles de référence, gérés depuis l'écran **Utilisateurs &
accès** de la Centrale :

| Rôle      | Libellé             | Vocation                                                      |
| --------- | ------------------- | ------------------------------------------------------------- |
| `owner`   | Propriétaire        | Accès complet, y compris configuration et finance.            |
| `manager` | Responsable magasin | Pilotage opérationnel : catalogue, stock, promotions, équipe. |
| `cashier` | Vendeur             | Opérations de caisse : encaissement, retours, clients.        |
| `viewer`  | Lecture seule       | Consultation des écrans sans droit d'écriture.                |

## Périmètre

Chaque affectation de rôle porte un **périmètre** de résolution :

* **Tout le réseau** — le rôle s'applique à l'ensemble des magasins.
* **Un magasin** — le rôle ne vaut que pour le magasin nommé.

Un même utilisateur peut cumuler plusieurs affectations (par exemple Lecture
seule sur le réseau et Vendeur sur un magasin). Le résolveur de droits **unit**
alors les permissions applicables au périmètre demandé. L'écran affiche cette
« Résolution des droits » pour chaque membre.

## Les permissions (scopes)

Chaque route de l'API et chaque action d'écran est gardée par une permission de
la forme `pos.<domaine>.<action>`. Le catalogue des permissions Centrale :

| Domaine                 | Permissions                                                       |
| ----------------------- | ----------------------------------------------------------------- |
| Catalogue               | `pos.catalog.view`, `pos.catalog.manage`                          |
| Stock & inventaire      | `pos.inventory.view`, `pos.inventory.manage`                      |
| Transferts              | `pos.transfer.manage`                                             |
| Approvisionnement       | `pos.procurement.manage`                                          |
| Commandes (OMS)         | `pos.orders.view`, `pos.orders.manage`                            |
| Prix                    | `pos.price.override`                                              |
| Promotions              | `pos.promotion.manage`                                            |
| Finance                 | `pos.finance.view`, `pos.finance.manage`                          |
| Cartes cadeaux          | `pos.giftcard.view`, `pos.giftcard.manage`, `pos.giftcard.redeem` |
| Fidélité                | `pos.loyalty.manage`, `pos.loyalty.config`                        |
| Crédits & notifications | `pos.credit.manage`, `pos.notification.send`                      |
| Clients                 | `pos.customers.view`, `pos.customers.manage`                      |
| Location / SAV          | `pos.rental.manage`, `pos.sav.manage`                             |
| Retours                 | `pos.returns.manage`                                              |
| Encaissement            | `pos.checkout.operate`                                            |
| Équipe                  | `pos.team.view`, `pos.team.manage`                                |
| Réglages                | `pos.settings.view`, `pos.settings.manage`                        |

Les routes de lecture (`GET`) exigent le scope `…view` du domaine ; les écritures
exigent le scope `…manage` (ou le scope spécialisé indiqué ci-dessus).

## Ce que voit l'utilisateur

Quand un rôle ne confère pas la permission requise, l'écran affiche un garde-fou
explicite (par exemple « Vous n'avez pas les droits pour gérer les promotions. »)
plutôt que de masquer silencieusement la fonction. Côté API, la requête reçoit
une réponse `403` dont l'enveloppe nomme le scope manquant.

## Lien avec l'API

Les mêmes scopes gouvernent l'API. Un jeton — Keycloak ou jeton POS opaque —
porte les scopes du principal ; le backend les vérifie sur chaque route. Voir
[Authentification](/fr/developers/authentication) pour le détail des deux
chemins d'authentification acceptés.
