Skip to main content
View as Markdown

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 } }

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: ['*']