Skip to content

Commit c77d168

Browse files
fuergaosi233soedirgo
authored andcommitted
feat: add role schema
1 parent 331ffc6 commit c77d168

File tree

3 files changed

+233
-118
lines changed

3 files changed

+233
-118
lines changed

src/lib/PostgresMetaRoles.ts

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
import { ident, literal } from 'pg-format'
22
import { DEFAULT_ROLES } from './constants'
33
import { rolesSql } from './sql'
4-
import { PostgresMetaResult, PostgresRole } from './types'
5-
export interface PostgresMetaRoleConfig {
6-
// https://www.rfc-editor.org/rfc/rfc6902
7-
op: 'remove' | 'add' | 'replace'
8-
path: string
9-
value?: string
10-
}
4+
import { PostgresMetaResult, PostgresRole, PostgresRoleCreate, PostgresRoleUpdate } from './types'
115
export function changeRoleConfig2Object(config: string[]) {
126
if (!config) {
137
return null
@@ -115,23 +109,7 @@ WHERE
115109
members,
116110
admins,
117111
config,
118-
}: {
119-
name: string
120-
is_superuser?: boolean
121-
can_create_db?: boolean
122-
can_create_role?: boolean
123-
inherit_role?: boolean
124-
can_login?: boolean
125-
is_replication_role?: boolean
126-
can_bypass_rls?: boolean
127-
connection_limit?: number
128-
password?: string
129-
valid_until?: string
130-
member_of?: string[]
131-
members?: string[]
132-
admins?: string[]
133-
config?: Record<string, string>
134-
}): Promise<PostgresMetaResult<PostgresRole>> {
112+
}: PostgresRoleCreate): Promise<PostgresMetaResult<PostgresRole>> {
135113
const isSuperuserClause = is_superuser ? 'SUPERUSER' : 'NOSUPERUSER'
136114
const canCreateDbClause = can_create_db ? 'CREATEDB' : 'NOCREATEDB'
137115
const canCreateRoleClause = can_create_role ? 'CREATEROLE' : 'NOCREATEROLE'
@@ -198,20 +176,7 @@ COMMIT;`
198176
password,
199177
valid_until,
200178
config,
201-
}: {
202-
name?: string
203-
is_superuser?: boolean
204-
can_create_db?: boolean
205-
can_create_role?: boolean
206-
inherit_role?: boolean
207-
can_login?: boolean
208-
is_replication_role?: boolean
209-
can_bypass_rls?: boolean
210-
connection_limit?: number
211-
password?: string
212-
valid_until?: string
213-
config?: PostgresMetaRoleConfig[]
214-
}
179+
}: PostgresRoleUpdate
215180
): Promise<PostgresMetaResult<PostgresRole>> {
216181
const { data: old, error } = await this.retrieve({ id })
217182
if (error) {

src/lib/types.ts

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,13 @@ export const postgresRelationshipSchema = Type.Object({
184184
})
185185
export type PostgresRelationship = Static<typeof postgresRelationshipSchema>
186186

187+
export const PostgresMetaRoleConfigSchema = Type.Object({
188+
op: Type.Union([Type.Literal('remove'), Type.Literal('add'), Type.Literal('replace')]),
189+
path: Type.String(),
190+
value: Type.Optional(Type.String()),
191+
})
192+
export type PostgresMetaRoleConfig = Static<typeof PostgresMetaRoleConfigSchema>
193+
187194
export const postgresRoleSchema = Type.Object({
188195
id: Type.Integer(),
189196
name: Type.String(),
@@ -198,14 +205,45 @@ export const postgresRoleSchema = Type.Object({
198205
connection_limit: Type.Integer(),
199206
password: Type.String(),
200207
valid_until: Type.Union([Type.String(), Type.Null()]),
201-
config: Type.Union([
202-
Type.String(),
203-
Type.Null(),
204-
Type.Record(Type.String(), Type.Union([Type.String()])),
205-
]),
208+
config: Type.Union([Type.String(), Type.Null(), Type.Record(Type.String(), Type.String())]),
206209
})
207210
export type PostgresRole = Static<typeof postgresRoleSchema>
208211

212+
export const postgresRoleCreateSchema = Type.Object({
213+
name: Type.String(),
214+
password: Type.Optional(Type.String()),
215+
inherit_role: Type.Optional(Type.Boolean()),
216+
can_login: Type.Optional(Type.Boolean()),
217+
is_superuser: Type.Optional(Type.Boolean()),
218+
can_create_db: Type.Optional(Type.Boolean()),
219+
can_create_role: Type.Optional(Type.Boolean()),
220+
is_replication_role: Type.Optional(Type.Boolean()),
221+
can_bypass_rls: Type.Optional(Type.Boolean()),
222+
connection_limit: Type.Optional(Type.Integer()),
223+
member_of: Type.Optional(Type.Array(Type.String())),
224+
members: Type.Optional(Type.Array(Type.String())),
225+
admins: Type.Optional(Type.Array(Type.String())),
226+
valid_until: Type.Optional(Type.String()),
227+
config: Type.Optional(Type.Record(Type.String(), Type.String())),
228+
})
229+
export type PostgresRoleCreate = Static<typeof postgresRoleCreateSchema>
230+
231+
export const postgresRoleUpdateSchema = Type.Object({
232+
name: Type.Optional(Type.String()),
233+
password: Type.Optional(Type.String()),
234+
inherit_role: Type.Optional(Type.Boolean()),
235+
can_login: Type.Optional(Type.Boolean()),
236+
is_superuser: Type.Optional(Type.Boolean()),
237+
can_create_db: Type.Optional(Type.Boolean()),
238+
can_create_role: Type.Optional(Type.Boolean()),
239+
is_replication_role: Type.Optional(Type.Boolean()),
240+
can_bypass_rls: Type.Optional(Type.Boolean()),
241+
connection_limit: Type.Optional(Type.Integer()),
242+
valid_until: Type.Optional(Type.String()),
243+
config: Type.Optional(Type.Array(PostgresMetaRoleConfigSchema)),
244+
})
245+
export type PostgresRoleUpdate = Static<typeof postgresRoleUpdateSchema>
246+
209247
export const postgresSchemaSchema = Type.Object({
210248
id: Type.Integer(),
211249
name: Type.String(),

0 commit comments

Comments
 (0)