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 |
Effectuer la suppression douce d'enregistrements. |
restore |
Restaurer les enregistrements supprimés en douceur. |
permanentDelete |
Retirer définitivement les enregistrements supprimés en douceur. |
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]
restore: [admin]
permanentDelete: [admin]
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. |
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: ['*']