mirror of https://github.com/requarks/wiki
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
3.1 KiB
137 lines
3.1 KiB
import type { FastifyInstance } from 'fastify'
|
|
|
|
export async function registerSchemas(app: FastifyInstance): Promise<void> {
|
|
/**
|
|
* GROUP RULE - A single page rule within a group
|
|
*/
|
|
app.addSchema({
|
|
$id: 'GroupRule',
|
|
type: 'object',
|
|
required: ['id', 'name', 'roles', 'match', 'mode', 'path'],
|
|
properties: {
|
|
id: {
|
|
type: 'string',
|
|
description: 'Client-generated identifier, unique within the group.'
|
|
},
|
|
name: {
|
|
type: 'string',
|
|
minLength: 1,
|
|
maxLength: 255
|
|
},
|
|
roles: {
|
|
type: 'array',
|
|
description: 'Permissions granted or denied by this rule.',
|
|
items: {
|
|
type: 'string'
|
|
}
|
|
},
|
|
match: {
|
|
type: 'string',
|
|
description: 'How `path` is compared against the page path.',
|
|
enum: ['START', 'END', 'REGEX', 'TAG', 'TAGALL', 'EXACT']
|
|
},
|
|
mode: {
|
|
type: 'string',
|
|
description:
|
|
'ALLOW grants the roles, DENY revokes them, FORCEALLOW grants them and cannot be overridden by a later DENY.',
|
|
enum: ['ALLOW', 'DENY', 'FORCEALLOW']
|
|
},
|
|
path: {
|
|
type: 'string',
|
|
maxLength: 255
|
|
},
|
|
locales: {
|
|
type: 'array',
|
|
description: 'Locale codes this rule is limited to. Empty means all locales.',
|
|
items: {
|
|
type: 'string'
|
|
}
|
|
},
|
|
sites: {
|
|
type: 'array',
|
|
description: 'Site IDs this rule is limited to. Empty means all sites.',
|
|
items: {
|
|
type: 'string',
|
|
format: 'uuid'
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
/**
|
|
* GROUP CORE - Essential fields only
|
|
*/
|
|
app.addSchema({
|
|
$id: 'GroupCore',
|
|
type: 'object',
|
|
properties: {
|
|
id: {
|
|
type: 'string',
|
|
format: 'uuid'
|
|
},
|
|
name: {
|
|
type: 'string',
|
|
minLength: 1,
|
|
maxLength: 255
|
|
},
|
|
isSystem: {
|
|
type: 'boolean',
|
|
description: 'System groups cannot be deleted.'
|
|
},
|
|
userCount: {
|
|
type: 'number',
|
|
description: 'Number of users assigned to this group.'
|
|
},
|
|
createdAt: {
|
|
type: 'string',
|
|
format: 'date-time',
|
|
description: 'RFC 3339 Date Time'
|
|
},
|
|
updatedAt: {
|
|
type: 'string',
|
|
format: 'date-time',
|
|
description: 'RFC 3339 Date Time'
|
|
}
|
|
}
|
|
})
|
|
|
|
/**
|
|
* GROUP - All fields
|
|
*/
|
|
app.addSchema({
|
|
$id: 'Group',
|
|
allOf: [
|
|
{
|
|
$ref: 'GroupCore#'
|
|
},
|
|
{
|
|
type: 'object',
|
|
properties: {
|
|
permissions: {
|
|
type: 'array',
|
|
description: 'Global permissions granted to members of this group.',
|
|
items: {
|
|
type: 'string'
|
|
}
|
|
},
|
|
rules: {
|
|
type: 'array',
|
|
items: {
|
|
$ref: 'GroupRule#'
|
|
}
|
|
},
|
|
redirectOnLogin: {
|
|
type: 'string'
|
|
},
|
|
redirectOnFirstLogin: {
|
|
type: 'string'
|
|
},
|
|
redirectOnLogout: {
|
|
type: 'string'
|
|
}
|
|
}
|
|
}
|
|
]
|
|
})
|
|
}
|