Every request to Synthigy runs as a principal — a user, or the service identity of an application — and every read and write is checked against that principal's roles. There are three layers, each answering a different question:
| Layer | Question | When it says no |
|---|---|---|
| Entity and relation rules | May this principal touch this kind of record at all? | the request fails with ENTITY_FORBIDDEN / FORBIDDEN |
| Attribute rules | May it read or write this field? | the field is left out of reads; writes to it are refused |
| Row rules | Which records? | the records are simply not there |
Users, groups and roles are records like any other: manage them in the engine
console (Administration → Users, Groups, Roles) or over /data.
Access control is switched on per entity, in the data modeling tool.
An entity with access control switched off is open to every signed-in caller, for every operation. Switch it on for anything that is not meant to be shared with all of them.
Once it is on, a role may do on that entity only what it is granted:
| Grant | Allows |
|---|---|
create | insert records |
read | read records |
update | change records |
delete | delete records |
browse | read — for directory-style visibility without other rights |
owners | everything above |
Relations have their own grants — read, write (link and unlink) and
delete. Owning both entities of a relation implies its grants.
Grants are attached to roles, not stored in the model version, so they can be changed on a deployed model without deploying anything.
On an entity with access control on, an attribute can deny a role read
or write. A denied attribute is silently left out of that role's reads — a
query that selects it still succeeds — and a write that sets it is refused
with ATTRIBUTE_FORBIDDEN.
Passwords are an example: User.password is readable and writable by
superusers only. Users change their own password in the console, under
Profile.
Row rules decide which records of an entity a principal sees, changes and deletes. They are written in the data modeling tool, per entity:
read, write (create and
update) or delete.user, group or role on the record matches the
principal, one of its groups, or one of its roles —
owner is me, team is one of my groups;Records outside the rules are filtered out, never reported as errors: a search
returns fewer rows, and an update of a hidden record does not happen
(DELETE_FORBIDDEN for an explicit delete). Every user can always read their
own User record.
A deploy is refused when a guard would stop working — for example because a new version removes an attribute the guard depends on.
Some operations are not about records and are granted as scopes on a role:
| Scope | Allows |
|---|---|
dataset:load | read the model and its versions |
dataset:deploy | deploy model versions |
dataset:delete | destroy a dataset |
dataset:subscription | be notified when a model is deployed |
schema:read | read the model as a schema, for code generation and editor tooling |
log:read | query logs and traffic |
log:configure | change log levels and destinations at runtime |
Synthigy ships these roles; use them as they are or as a starting point.
| Role | For |
|---|---|
| IAM Admin | Full administrator of users, groups, roles, OAuth, federation and service identities |
| IAM Auditor | Read-only view of the whole IAM and OAuth configuration |
| User Admin | Day-to-day users, groups and memberships; cannot assign roles |
| Role Admin | Creating roles and assigning them |
| Access Admin | The grants matrix: which roles may do what on which entities |
| Department Administrator | Administration delegated to the groups it manages |
| User Provisioner | Creating accounts and their onboarding links, delegated to its groups |
| Internal Member | Baseline for staff: browse users, groups and public profiles |
| Dataset Developer | Designing, deploying and administering every dataset |
| Dataset Modeler | Modeling the datasets shared with it |
| Dataset Explorer | Reading the whole dataset catalog |
| XSQL Developer | The schema for code generation and editor tooling; no data access |
To let a team or an application manage only its own users, give users an
owner group and give the administrators a role scoped to it (User
Provisioner, Department Administrator). Row rules on User keep each
administrator to the users of the groups it belongs to.
New accounts are created over /data. The person then sets their own first
credential: a confidential client calls POST /oauth/onboard with the user's
xid and gets a one-time link (24 hours by default) to deliver by mail or any
other way. The link lets the person choose a password or link an identity
provider. Synthigy never sends mail itself.
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |