Sub-users
Sub-users are API users. While you can use the super-user for single-user projects, it is recommended to create sub-users for multi-user projects and assign privileges per table.
Create a new sub-user
- Web App
- HTTP
- CLI
POST https://api.centia.io/api/v4/users HTTP/1.1
Content-Type: application/json
Authorization: Bearer abc123
{
"name": "alx",
"email": "alx@gunsnroses.com",
"password": "Paradise_City!%Rck1987"
}
POST https://api.centia.io/api/v4/users HTTP/1.1
Content-Type: application/json
Authorization: Bearer abc123
[
{
"name": "alx",
"email": "alx@gunsnroses.com",
"password": "Paradise_City!%Rck1987"
},
{
"name": "slash",
"email": "slash@gunsnroses.com",
"password": "November_Rain!%Pno1991"
},
{
"name": "izzy",
"email": "izzy@gunsnroses.com",
"password": "KnockinOn_HeavensDoor!%GnR1990"
},
{
"name": "duff",
"email": "duff@gunsnroses.com",
"password": "Welcome2_Jungle!%AxL1987"
},
{
"name": "steven",
"email": "steven@gunsnroses.com",
"password": "SweetChild_oMine!%Gtr1987"
}
]
centia user add "alx"
Get sub-users
- Web App
- HTTP
- CLI
GET https://api.centia.io/api/v4/users/alx,slash HTTP/1.1
Accept: application/json; charset=utf-8
Authorization: Bearer abc123
GET https://api.centia.io/api/v4/users HTTP/1.1
Accept: application/json; charset=utf-8
Authorization: Bearer abc123
centia user get "alx"
Update sub-users
It is not possible to update all sub-users in a single operation. You must specify the sub-users explicitly.
- Web App
- HTTP
- CLI
PATCH https://api.centia.io/api/v4/users/alx,slash HTTP/1.1
Content-Type: application/json
Authorization: Bearer abc123
{
"user_group": "[\"gunsnroses\"]"
}
centia user update "alx"
Delete sub-users
It is not possible to delete all sub-users in a single operation. You must specify the sub-users explicitly.
- Web App
- HTTP
- CLI
DELETE https://api.centia.io/api/v4/users/izzy,steven HTTP/1.1
Accept: application/json; charset=utf-8
Authorization: Bearer abc123
centia user drop "izzy"
Groups and inheritance
Sub-users can be organized in groups, and privileges granted to a group are inherited by its members. A group is simply a sub-user itself: create a sub-user to act as the group (e.g. gunsnroses) and add other sub-users to it by setting their user_group property.
The user_group property holds a JSON array of group names, encoded as a string. It can be set when creating a sub-user or later with a PATCH:
- Web App
- HTTP
PATCH https://api.centia.io/api/v4/users/alx,slash HTTP/1.1
Content-Type: application/json
Authorization: Bearer abc123
{
"user_group": "[\"gunsnroses\"]"
}
PATCH https://api.centia.io/api/v4/users/slash HTTP/1.1
Content-Type: application/json
Authorization: Bearer abc123
{
"user_group": "[\"gunsnroses\", \"velvetrevolver\"]"
}
A sub-user can be a member of multiple groups, and a group can itself be a member of other groups, so inheritance is transitive across multiple levels. Cyclic and diamond-shaped memberships are handled safely.
How privileges are resolved
The effective privilege of a sub-user on a table is the highest privilege found among:
- the sub-user's own privilege on the table, and
- the privileges of every group in the sub-user's full inheritance chain.
Privileges rank none < read < write. If alx has no explicit privilege on rockhall.inductees but the group gunsnroses has write, then alx effectively has write on the table.
Schema ownership is inherited the same way: a sub-user owns a schema when the sub-user — or any group in its inheritance chain — has the same name as the schema. Since every sub-user gets a schema named after itself, adding members to the group gunsnroses also gives them full access to the gunsnroses schema.
Inheritance applies everywhere privileges are enforced: SQL and the HTTP API as well as the OGC services (WMS/WFS). The super-user (the database owner) always has full access and is not affected by groups.
Signup (Browser – Create a new user)
Centia.io supports signup via the browser. From your app, you can redirect the user to the signup page:
https://api.centia.io/signup?client_id=abc123&parentdb=mydb&redirect_uri=https://myapp.com/login
Parameters:
- client_id: OAuth client id configured in Centia.io
- parentdb: The parent/tenant database under which the new user should be created
- redirect_uri: URL in your app to return to after sign‑up
Using the SDK
The SDK has a SignUp helper that redirects the user to the signup page:
import { SignUp } from "@centia-io/sdk";
const signUp = new SignUp({
host: "https://api.centia.io",
clientId: "your-client-id",
parentDb: "your-parent-database",
redirectUri: "https://myapp.com/login"
});
// Start sign-up when the user clicks "Create account"
function onSignUpClick() {
signUp.signUp(); // Redirects to the Centia.io sign-up page
}
- After the user completes sign-up and is redirected back to your app, start your normal sign-in flow (for example, CodeFlow). A session is already started, so the user is typically signed in automatically.
- Client property
allow_signupmust be set totruefor the used OAuth client. - Client property
social_signupmust be set totruefor users to sign up with social login.