@develit-services/rbac 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,344 @@
1
+ import { z } from 'zod';
2
+
3
+ const TEST_SCOPES = [
4
+ "test.read",
5
+ "test.edit",
6
+ "test.delete",
7
+ "test.{jwt.organizationId}.read",
8
+ "test.{jwt.user.rawUserMetaData.organizationId}.read",
9
+ "test.{jwt.user.rawUserMetaData.organizationId}.edit",
10
+ "test.{param.resourceId}.read",
11
+ "test.organization.{jwt.user.rawUserMetaData.organizationId}.resource.{jwt.user.rawUserMetaData.organizationId}.read",
12
+ "test.organization.{jwt.user.rawUserMetaData.organizationId}.branch.{jwt.userData.organizationBranchId}.read",
13
+ "test.{invalid}.scope",
14
+ "test.{}.scope",
15
+ "test.{jwt.}.scope",
16
+ "test.{.key}.scope"
17
+ ];
18
+ const SCOPES = [
19
+ "tickets.read",
20
+ "tickets.{jwt.user.rawUserMetaData.organizationId}.read",
21
+ "tickets.create",
22
+ "tickets.edit",
23
+ "tickets.delete",
24
+ "tickets.archive",
25
+ "tickets.automations.pause",
26
+ "tickets.automations.resume",
27
+ "tickets.dependencies.read",
28
+ "tickets.dependencies.create",
29
+ "tickets.dependencies.edit",
30
+ "tickets.dependencies.delete",
31
+ "tickets.confirmation.send",
32
+ "tickets.confirmation.download",
33
+ "tickets.payments.create",
34
+ "tickets.payments.read",
35
+ "tickets.payments.edit",
36
+ "tickets.payments.delete",
37
+ "tickets.payments.confirmation.send",
38
+ "tickets.payments.confirmation.download",
39
+ "tickets.logs.read",
40
+ "tickets.logs.create",
41
+ "tickets.logs.delete",
42
+ "users.read",
43
+ "users.create",
44
+ "users.edit",
45
+ "users.delete",
46
+ "users.archive",
47
+ "users.password.reset.send",
48
+ "users.permissions.read",
49
+ "users.permissions.assign",
50
+ "users.permissions.delete",
51
+ "users.2fa.enable",
52
+ "users.2fa.disable",
53
+ "users.logs.read",
54
+ "users.logs.create",
55
+ "users.logs.delete",
56
+ "traders.read",
57
+ "traders.create",
58
+ "traders.edit",
59
+ "traders.delete",
60
+ "traders.logs",
61
+ "clients.read",
62
+ "organization.{jwt.user.rawUserMetaData.organizationId}.clients.read",
63
+ "clients.create",
64
+ "clients.edit",
65
+ "clients.delete",
66
+ "clients.pin.read",
67
+ // read client pin
68
+ "clients.pin.edit",
69
+ // edit client pin
70
+ "clients.limits.read",
71
+ // read client limits
72
+ "clients.limits.edit",
73
+ // edit client limits
74
+ "clients.trader.assign",
75
+ "clients.trader.edit",
76
+ "clients.logs.read",
77
+ "clients.logs.create",
78
+ "clients.logs.delete",
79
+ "roles.read",
80
+ "roles.create",
81
+ "roles.edit",
82
+ "roles.delete",
83
+ "roles.permissions.assign",
84
+ // assign permissions to roles
85
+ "roles.permissions.delete",
86
+ // delete permissions from roles
87
+ "roles.logs.read",
88
+ "roles.logs.create",
89
+ "roles.logs.delete",
90
+ "roles.users.read",
91
+ // read users assigned to roles
92
+ "accounts.read",
93
+ "accounts.create",
94
+ "accounts.edit",
95
+ "accounts.delete",
96
+ "accounts.archive",
97
+ "accounts.balance",
98
+ "accounts.identifiers.create",
99
+ "accounts.identifiers.read",
100
+ "accounts.identifiers.edit",
101
+ "accounts.identifiers.delete",
102
+ "accounts.transactions.read",
103
+ "accounts.logs.read",
104
+ "accounts.logs.create",
105
+ "accounts.logs.delete",
106
+ ...TEST_SCOPES
107
+ ];
108
+ const LABELED_SCOPES = [
109
+ { label: "Zobrazit tiket", value: "tickets.read" },
110
+ { label: "Vytvo\u0159it tiket", value: "tickets.create" },
111
+ { label: "Upravit tiket", value: "tickets.edit" },
112
+ { label: "Smazat tiket", value: "tickets.delete" },
113
+ { label: "Archivovat tiket", value: "tickets.archive" },
114
+ {
115
+ label: "Pozastavit automatizaci tiketu",
116
+ value: "tickets.automations.pause"
117
+ },
118
+ { label: "Obnovit automatizaci tiketu", value: "tickets.automations.resume" },
119
+ { label: "Zobrazit z\xE1vislosti tiket\u016F", value: "tickets.dependencies.read" },
120
+ { label: "Vytvo\u0159it z\xE1vislosti tiket\u016F", value: "tickets.dependencies.create" },
121
+ { label: "Upravit z\xE1vislosti tiket\u016F", value: "tickets.dependencies.edit" },
122
+ { label: "Smazat z\xE1vislosti tiket\u016F", value: "tickets.dependencies.delete" },
123
+ { label: "Poslat potvrzen\xED tiketu", value: "tickets.confirmation.send" },
124
+ {
125
+ label: "St\xE1hnout potvrzen\xED tiketu",
126
+ value: "tickets.confirmation.download"
127
+ },
128
+ { label: "Vytvo\u0159it platbu tiketu", value: "tickets.payments.create" },
129
+ { label: "Zobrazit platby tiketu", value: "tickets.payments.read" },
130
+ { label: "Upravit platby tiketu", value: "tickets.payments.edit" },
131
+ { label: "Smazat platby tiketu", value: "tickets.payments.delete" },
132
+ {
133
+ label: "Poslat potvrzen\xED platby tiketu",
134
+ value: "tickets.payments.confirmation.send"
135
+ },
136
+ {
137
+ label: "St\xE1hnout potvrzen\xED platby tiketu",
138
+ value: "tickets.payments.confirmation.download"
139
+ },
140
+ { label: "Zobrazit logy tiketu", value: "tickets.logs.read" },
141
+ { label: "Vytvo\u0159it logy tiketu", value: "tickets.logs.create" },
142
+ { label: "Smazat logy tiketu", value: "tickets.logs.delete" },
143
+ { label: "Zobrazit obchodn\xEDky", value: "traders.read" },
144
+ { label: "Vytvo\u0159it obchodn\xEDky", value: "traders.create" },
145
+ { label: "Upravit obchodn\xEDky", value: "traders.edit" },
146
+ { label: "Smazat obchodn\xEDky", value: "traders.delete" },
147
+ { label: "Logy obchodn\xEDk\u016F", value: "traders.logs" },
148
+ { label: "Zobrazit klienty", value: "clients.read" },
149
+ { label: "Vytvo\u0159it klienty", value: "clients.create" },
150
+ { label: "Upravit klienty", value: "clients.edit" },
151
+ { label: "Smazat klienty", value: "clients.delete" },
152
+ { label: "Zobrazit PIN klienta", value: "clients.pin.read" },
153
+ { label: "Upravit PIN klienta", value: "clients.pin.edit" },
154
+ { label: "Zobrazit limity klienta", value: "clients.limits.read" },
155
+ { label: "Upravit limity klienta", value: "clients.limits.edit" },
156
+ { label: "P\u0159i\u0159adit obchodn\xEDka klientovi", value: "clients.trader.assign" },
157
+ { label: "Upravit obchodn\xEDka klienta", value: "clients.trader.edit" },
158
+ { label: "Zobrazit logy klient\u016F", value: "clients.logs.read" },
159
+ { label: "Vytvo\u0159it logy klient\u016F", value: "clients.logs.create" },
160
+ { label: "Smazat logy klient\u016F", value: "clients.logs.delete" },
161
+ { label: "Zobrazit u\u017Eivatele", value: "users.read" },
162
+ { label: "Vytvo\u0159it u\u017Eivatele", value: "users.create" },
163
+ { label: "Upravit u\u017Eivatele", value: "users.edit" },
164
+ { label: "Smazat u\u017Eivatele", value: "users.delete" },
165
+ { label: "Archivovat u\u017Eivatele", value: "users.archive" },
166
+ { label: "Poslat reset hesla", value: "users.password.reset.send" },
167
+ { label: "Zobrazit opr\xE1vn\u011Bn\xED u\u017Eivatel\u016F", value: "users.permissions.read" },
168
+ { label: "P\u0159i\u0159adit opr\xE1vn\u011Bn\xED u\u017Eivatel\u016Fm", value: "users.permissions.assign" },
169
+ { label: "Odebrat opr\xE1vn\u011Bn\xED u\u017Eivatel\u016Fm", value: "users.permissions.delete" },
170
+ { label: "Povolit 2FA u\u017Eivatel\u016Fm", value: "users.2fa.enable" },
171
+ { label: "Zak\xE1zat 2FA u\u017Eivatel\u016Fm", value: "users.2fa.disable" },
172
+ { label: "Zobrazit logy u\u017Eivatel\u016F", value: "users.logs.read" },
173
+ { label: "Vytvo\u0159it logy u\u017Eivatel\u016F", value: "users.logs.create" },
174
+ { label: "Smazat logy u\u017Eivatel\u016F", value: "users.logs.delete" },
175
+ { label: "Zobrazit role", value: "roles.read" },
176
+ { label: "Vytvo\u0159it role", value: "roles.create" },
177
+ { label: "Upravit role", value: "roles.edit" },
178
+ { label: "Smazat role", value: "roles.delete" },
179
+ { label: "P\u0159i\u0159adit opr\xE1vn\u011Bn\xED rol\xEDm", value: "roles.permissions.assign" },
180
+ { label: "Odebrat opr\xE1vn\u011Bn\xED rol\xEDm", value: "roles.permissions.delete" },
181
+ { label: "Zobrazit logy rol\xED", value: "roles.logs.read" },
182
+ { label: "Vytvo\u0159it logy rol\xED", value: "roles.logs.create" },
183
+ { label: "Smazat logy rol\xED", value: "roles.logs.delete" },
184
+ { label: "Zobrazit u\u017Eivatele p\u0159i\u0159azen\xE9 k rol\xEDm", value: "roles.users.read" },
185
+ { label: "Zobrazit \xFA\u010Dty", value: "accounts.read" },
186
+ { label: "Vytvo\u0159it \xFA\u010Dty", value: "accounts.create" },
187
+ { label: "Upravit \xFA\u010Dty", value: "accounts.edit" },
188
+ { label: "Smazat \xFA\u010Dty", value: "accounts.delete" },
189
+ { label: "Archivovat \xFA\u010Dty", value: "accounts.archive" },
190
+ { label: "Zobrazit z\u016Fstatek \xFA\u010Dtu", value: "accounts.balance" },
191
+ {
192
+ label: "Vytvo\u0159it identifik\xE1tory \xFA\u010Dtu",
193
+ value: "accounts.identifiers.create"
194
+ },
195
+ { label: "Zobrazit identifik\xE1tory \xFA\u010Dtu", value: "accounts.identifiers.read" },
196
+ { label: "Upravit identifik\xE1tory \xFA\u010Dtu", value: "accounts.identifiers.edit" },
197
+ { label: "Smazat identifik\xE1tory \xFA\u010Dtu", value: "accounts.identifiers.delete" },
198
+ { label: "Zobrazit transakce \xFA\u010Dtu", value: "accounts.transactions.read" },
199
+ { label: "Zobrazit logy \xFA\u010Dt\u016F", value: "accounts.logs.read" },
200
+ { label: "Vytvo\u0159it logy \xFA\u010Dt\u016F", value: "accounts.logs.create" },
201
+ { label: "Smazat logy \xFA\u010Dt\u016F", value: "accounts.logs.delete" }
202
+ ];
203
+
204
+ const assignRoleToUserInputSchema = z.object({
205
+ userId: z.uuid(),
206
+ roleId: z.uuid()
207
+ });
208
+
209
+ const assignRolesToUserInputSchema = z.object({
210
+ userId: z.uuid(),
211
+ roles: z.array(z.uuid())
212
+ });
213
+
214
+ const createRoleInputSchema = z.object({
215
+ name: z.string()
216
+ });
217
+
218
+ const deleteRoleInputSchema = z.object({
219
+ id: z.uuid()
220
+ });
221
+
222
+ const getUserPermissionsInputSchema = z.object({
223
+ userId: z.uuid()
224
+ });
225
+
226
+ const grantScopeToRoleInputSchema = z.object({
227
+ roleId: z.uuid(),
228
+ scope: z.enum(SCOPES),
229
+ resourceId: z.string().optional()
230
+ });
231
+
232
+ const grantScopeToUserInputSchema = z.object({
233
+ userId: z.uuid(),
234
+ scope: z.enum(SCOPES),
235
+ resourceId: z.string().optional()
236
+ });
237
+
238
+ const grantScopesToUserInputSchema = z.object({
239
+ userId: z.uuid(),
240
+ scopes: z.array(
241
+ z.object({
242
+ scope: z.enum(SCOPES),
243
+ resourceId: z.string().optional()
244
+ })
245
+ )
246
+ });
247
+
248
+ const revokeRoleFromUserInputSchema = z.object({
249
+ userId: z.uuid(),
250
+ roleId: z.uuid()
251
+ });
252
+
253
+ const revokeScopeFromRoleInputSchema = z.object({
254
+ roleId: z.uuid(),
255
+ scope: z.enum(SCOPES),
256
+ resourceId: z.string().optional()
257
+ });
258
+
259
+ const revokeScopeFromUserInputSchema = z.object({
260
+ userId: z.uuid(),
261
+ scope: z.enum(SCOPES),
262
+ resourceId: z.string().optional()
263
+ });
264
+
265
+ const updateRoleInputSchema = z.object({
266
+ id: z.uuid(),
267
+ name: z.string()
268
+ });
269
+
270
+ const userDataSchema = z.object({
271
+ referenceId: z.string(),
272
+ email: z.string().optional(),
273
+ role: z.string().optional()
274
+ });
275
+ const jwtPayloadSchema = z.object({
276
+ sub: z.string(),
277
+ user: z.object({
278
+ id: z.uuid(),
279
+ createdAt: z.date().nullable(),
280
+ updatedAt: z.date().nullable(),
281
+ deletedAt: z.date().nullable(),
282
+ role: z.string(),
283
+ email: z.email(),
284
+ rawAppMetaData: z.any(),
285
+ rawUserMetaData: z.any(),
286
+ isSuperAdmin: z.boolean().default(false),
287
+ isSsoUser: z.boolean().default(false),
288
+ lastSignInAt: z.date().nullable().optional(),
289
+ emailConfirmedAt: z.date().nullable().optional(),
290
+ confirmationSentAt: z.date().nullable().optional(),
291
+ recoverySentAt: z.date().nullable().optional(),
292
+ emailChangeToken: z.string().nullable().optional(),
293
+ emailChangeSentAt: z.date().nullable().optional(),
294
+ isBanned: z.boolean().default(false).nullable().optional()
295
+ }),
296
+ iat: z.number(),
297
+ exp: z.number(),
298
+ userData: userDataSchema.optional()
299
+ });
300
+
301
+ const accessRequestSchema = z.object({
302
+ scope: z.enum(SCOPES),
303
+ // 'exchange-offices.{jwt.exchangeOfficeId}.read'
304
+ resourceId: z.string().optional(),
305
+ // '123'
306
+ resourcePath: z.string().optional()
307
+ // 'exchange-offices.333.read' - only needed for scopes with placeholders
308
+ });
309
+ const verifyAccessInputSchema = z.object({
310
+ userId: z.uuid(),
311
+ accessRequests: z.array(accessRequestSchema),
312
+ jwt: jwtPayloadSchema.extend({
313
+ createdAt: z.coerce.date().nullable().optional(),
314
+ updatedAt: z.coerce.date().nullable().optional(),
315
+ deletedAt: z.coerce.date().nullable().optional(),
316
+ lastSignInAt: z.coerce.date().nullable().optional(),
317
+ emailConfirmedAt: z.coerce.date().nullable().optional(),
318
+ confirmationSentAt: z.coerce.date().nullable().optional(),
319
+ recoverySentAt: z.coerce.date().nullable().optional(),
320
+ emailChangeSentAt: z.coerce.date().nullable().optional(),
321
+ user: jwtPayloadSchema.shape.user.extend({
322
+ createdAt: z.coerce.date().nullable().optional(),
323
+ updatedAt: z.coerce.date().nullable().optional(),
324
+ lastSignInAt: z.coerce.date().nullable().optional(),
325
+ emailConfirmedAt: z.coerce.date().nullable().optional()
326
+ })
327
+ }).optional()
328
+ });
329
+
330
+ const verifyScopeInputSchema = z.object({
331
+ scopes: z.array(z.string()),
332
+ resourceId: z.string().optional(),
333
+ jwt: z.object({
334
+ sub: z.uuid(),
335
+ rbac: z.object({
336
+ roles: z.array(z.string()).optional()
337
+ })
338
+ })
339
+ });
340
+ const verifyScopeOutputSchema = z.object({
341
+ isVerified: z.boolean().default(false)
342
+ });
343
+
344
+ export { LABELED_SCOPES as L, SCOPES as S, assignRoleToUserInputSchema as a, assignRolesToUserInputSchema as b, createRoleInputSchema as c, deleteRoleInputSchema as d, grantScopeToRoleInputSchema as e, grantScopeToUserInputSchema as f, getUserPermissionsInputSchema as g, grantScopesToUserInputSchema as h, revokeScopeFromRoleInputSchema as i, revokeScopeFromUserInputSchema as j, verifyScopeInputSchema as k, verifyScopeOutputSchema as l, jwtPayloadSchema as m, revokeRoleFromUserInputSchema as r, updateRoleInputSchema as u, verifyAccessInputSchema as v };