Aller au contenu principal
Version: Cible · roadmap

Profils

Les acteurs, rangés en catégories. Un profil se reconnaît à une condition sur l'identité ; les permissions disent ensuite ce qu'il a le droit de faire.

Users et admins​

Une station a deux sortes de personnes, et deux plans d'accès qui ne se mélangent pas :

users — la roomadmins — la console
station productles clientsl'équipe du product builder
station processles employés, membres de l'équipel'admin, l'équipe IT
fontréserver, approuver, soumettreconfigurer, publier, lire le journal, traiter les incidents
réglés parprofils et permissions, dans la configles droits de la console, dans l'organisation

L'employé est à une station process ce que le client est à une station product ; l'admin IT est ce qu'est le product builder. Une même personne peut tenir les deux : un employé de l'IT qui soumet la création d'un compte agit en user de profil it ; quand il modifie la config, en admin.

Les profils et les permissions s'appliquent aux users, et aux agents qui agissent pour eux. Ni aux admins, ni aux automatisations.

Les profils : le « qui », comme les kinds sont le « quoi »​

Un kind classe les actions par une condition sur leurs champs, et peut changer leur présentation, leur sélection et leur submit. Un profil classe les users par une condition sur leur identité, et peut changer les mêmes points.

profiles:
anonyme: # le profil par défaut
when: "identity.authenticated == false"
grants: [cuisine.getMenu, cuisine.placeOrder, cuisine.getDeliveryOptions, cuisine.createDelivery]
client:
when: "identity.authenticated and identity.type == 'person'"
grants: [cuisine.getMenu, cuisine.placeOrder, cuisine.getDeliveryOptions, cuisine.createDelivery,
cuisine.listOrders, cuisine.cancelOrder]
agent-entreprise: # pas de cancelOrder : annuler reste un acte humain
when: "identity.type == 'agent' and identity.org != null"
grants: [cuisine.getMenu, cuisine.placeOrder, cuisine.getDeliveryOptions, cuisine.createDelivery]
manager:
when: "'support-manager' in identity.roles"
grants: [paiement.proposeRefund, paiement.createRefund]

Un profil reçoit des opérations avec grants ; une opération qu'aucun profil n'a reçue n'est appelée pour personne. Voir Permissions.

Une identité peut correspondre à plusieurs profils : tous s'appliquent.

L'identité vient de la porte et de ses fournisseurs : un visiteur anonyme du widget, un client vérifié par un code ou par le login du tenant, un agent avec sa sous-identité déléguée, un salarié par l'annuaire de l'organisation. Les champs que lit when sont décrits dans Identité.

Spécialiser par profil : per_profile​

Un profil peut être servi autrement, sur les mêmes points qu'un kind :

skills:
- name: takeDeliveryOption
per_profile:
agent-entreprise: # un agent ne livre qu'à une adresse enregistrée
select: {guards: [{name: adresse-enregistree, require: "$item.fields.address in identity.addresses"}]}
manager:
present: {fields: {margin: {from: margin, type: price}}}
Afficher n'est pas autoriser

Montrer plus de colonnes à un manager, c'est de l'interface. Cacher un outil à un profil ne l'interdit pas : ce qui est permis s'écrit en grants et se resserre en permission ou garde. Ce qu'un profil ne doit pas voir se règle par une permission dans present, que Core applique avant le modèle (Permissions).