Permissions des tables
Sovrium contrôle l'accès aux enregistrements avec un contrôle d'accès basé sur les rôles (RBAC) au niveau de la table, des permissions par champ pour un contrôle granulaire des colonnes, et des prédicats au niveau ligne optionnels pour un cloisonnement par ligne. Un accès non autorisé renvoie 404 (jamais 403) afin d'empêcher l'énumération des enregistrements.
Valeurs de permission
Chaque opération accepte l'un de trois formats :
| Valeur | Signification |
|---|---|
all |
Tout le monde, y compris les visiteurs non authentifiés. |
authenticated |
Tout utilisateur connecté. |
['admin', 'editor'] |
Uniquement les noms de rôles listés (un tableau). |
Les trois rôles intégrés sont admin, member et viewer (du plus élevé au plus bas). Des noms de rôles personnalisés sont également acceptés dans la forme tableau.
Permissions au niveau de la table
Définissez permissions sur une table pour conditionner chaque opération.
| Opération | Contrôle qui peut… |
|---|---|
read |
Consulter les enregistrements. |
comment |
Ajouter des commentaires aux enregistrements. |
create |
Créer de nouveaux enregistrements. |
update |
Modifier les enregistrements existants. |
delete |
Supprimer en douceur et restaurer les enregistrements. |
fields |
Permissions de lecture/écriture par champ (voir ci-dessous). |
inherit |
Hériter de toutes les permissions d'une table parente nommée. |
permissions:
read: all
comment: authenticated
create: [admin, editor]
update: [admin, editor]
delete: [admin]Restauration et suppression définitive
Il n'existe pas d'opération restore ni permanentDelete distincte.
La restauration partage l'autorisation delete. Restaurer est l'inverse de supprimer en douceur : les deux sens passent donc par la même porte, et quiconque peut supprimer un enregistrement en douceur peut le restaurer. Une autorisation distincte laisserait les deux côtés diverger, l'un devenant une porte plus faible sur la même opération.
La suppression définitive est réservée aux administrateurs et n'est pas configurable. ?permanent=true efface la ligne de façon irréversible : cette opération est donc réservée au rôle admin sur toutes les tables, quelles que soient les permissions. Les tentatives non administrateur renvoient 404 (anti-énumération), comme tout autre accès non autorisé.
Permissions par champ
Restreignez l'accès en lecture/écriture à des colonnes spécifiques sous permissions.fields. Chaque entrée nomme un field et, optionnellement, ses audiences read et write (mêmes trois formats). Lorsqu'une permission de champ est omise, elle hérite du read au niveau de la table (pour la lecture) ou de create/update (pour l'écriture).
| Propriété | Description |
|---|---|
field |
Nom du champ auquel cette permission s'applique. |
read |
Qui peut lire (SELECT) ce champ. Hérite du read de la table si non défini. |
write |
Qui peut écrire (INSERT/UPDATE) ce champ. Hérite si non défini. |
Un champ qu'un rôle ne peut pas lire n'est pas non plus interrogeable par ce rôle : filter, groupBy et aggregate sur ce champ renvoient 404 (anti-énumération), car une colonne masquée divulguerait autrement ses valeurs via le jeu de résultats — groupBy en renvoie les valeurs distinctes, et aggregate son minimum et son maximum. Un champ que le rôle peut lire reste entièrement interrogeable.
permissions:
read: authenticated
fields:
- { field: salary, read: [admin, hr], write: [admin] }
- { field: department, read: all, write: [admin] }Permissions au niveau ligne
Définissez rowLevelPermissions pour un cloisonnement en défense en profondeur. Chaque opération CRUD peut porter un prédicat when côté serveur qui est ajouté comme filtre à chaque requête retournant des enregistrements. La barrière de rôle s'exécute en premier ; le prédicat au niveau ligne filtre ensuite dans la portée du rôle autorisé.
Un prédicat est { field, operator, value } :
| Champ | Description |
|---|---|
field |
Le champ de la table, ou une chaîne de relation comme project.client_id, sur lequel filtrer. |
operator |
eq, neq ou in (appartenance à un tableau). |
value |
Un littéral (chaîne/nombre/booléen/tableau) ou une référence $currentUser résolue par requête depuis la session. |
rowLevelPermissions:
read:
when:
field: client_id
operator: in
value: { kind: currentUser, path: { kind: assignment, tableSlug: clients } }
write:
when:
field: client_id
operator: in
value: { kind: currentUser, path: { kind: assignment, tableSlug: clients } }404, pas 403 — anti-énumération. Lorsqu'une requête échoue à l'autorisation (au niveau de la table, du champ ou de la ligne), Sovrium renvoie 404 Not Found plutôt que 403 Forbidden. Cela empêche les attaquants de découvrir quels enregistrements ou tables existent en sondant les codes de statut.
Permissions Ressource:Action
Pour des contextes de permission plus larges (plugin admin, clés API), Sovrium prend également en charge une carte resource: [actions] où chaque ressource liste les actions autorisées et * signifie toutes les actions :
users: [read, list]
posts: [create, read, update, delete]
analytics: ['*']Dernière mise à jour 11 août 2026
Cette documentation a été rédigée avec de l'IA : des erreurs ou du contenu obsolète sont donc possibles. Sovrium est en bêta. Les contributions et corrections sont les bienvenues.