Skip to content

Commit d8ff3c0

Browse files
committed
refactor: move permissions into single location
1 parent 48b330a commit d8ff3c0

File tree

3 files changed

+13
-14
lines changed

3 files changed

+13
-14
lines changed

apps/web/src/features/admin/components/UpdateUserForm.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { estimatePasswordStrength } from '@douglasneuroinformatics/libpasswd';
55
import { Button, Dialog, Form } from '@douglasneuroinformatics/libui/components';
66
import { useTranslation } from '@douglasneuroinformatics/libui/hooks';
77
import type { FormTypes } from '@opendatacapture/runtime-core';
8-
import { $UserPermission } from '@opendatacapture/schemas/user';
9-
import type { UserPermission } from '@opendatacapture/schemas/user';
8+
import { $UserPermission } from '@opendatacapture/schemas/core';
9+
import type { UserPermission } from '@opendatacapture/schemas/core';
1010
import type { Promisable } from 'type-fest';
1111
import { z } from 'zod';
1212

packages/schemas/src/core/core.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,14 @@ export const $AppSubjectName = z.enum([
2323

2424
export type BaseAppAbility = PureAbility<[AppAction, AppSubjectName]>;
2525

26-
export type Permissions = RawRuleOf<BaseAppAbility>[];
26+
export type UserPermission = z.infer<typeof $UserPermission>;
27+
export const $UserPermission = z.object({
28+
action: $AppAction,
29+
subject: $AppSubjectName
30+
}) satisfies z.ZodType<RawRuleOf<BaseAppAbility>>;
31+
32+
export type Permissions = z.infer<typeof $Permissions>;
33+
export const $Permissions = z.array($UserPermission);
2734

2835
export const $Language: z.ZodType<Language> = z.enum(['en', 'fr']);
2936

packages/schemas/src/user/user.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
import { z } from 'zod';
22

3-
import { $AppAction, $AppSubjectName, $BaseModel } from '../core/core.js';
3+
import { $BaseModel, $Permissions } from '../core/core.js';
44
import { $Sex } from '../subject/subject.js';
55

66
export const $BasePermissionLevel = z.enum(['ADMIN', 'GROUP_MANAGER', 'STANDARD']);
77

88
export type BasePermissionLevel = z.infer<typeof $BasePermissionLevel>;
99

10-
export type UserPermission = z.infer<typeof $UserPermission>;
11-
export const $UserPermission = z.object({
12-
action: $AppAction,
13-
subject: $AppSubjectName
14-
});
15-
16-
export const $AdditionalUserPermissions = z.array($UserPermission);
17-
1810
export type User = z.infer<typeof $User>;
1911
export const $User = $BaseModel.extend({
20-
additionalPermissions: $AdditionalUserPermissions,
12+
additionalPermissions: $Permissions,
2113
basePermissionLevel: $BasePermissionLevel.nullable(),
2214
dateOfBirth: z.coerce.date().nullish(),
2315
firstName: z.string().min(1),
@@ -44,5 +36,5 @@ export const $CreateUserData = $User
4436

4537
export type UpdateUserData = z.infer<typeof $UpdateUserData>;
4638
export const $UpdateUserData = $CreateUserData.partial().extend({
47-
additionalPermissions: $AdditionalUserPermissions.optional()
39+
additionalPermissions: $Permissions.optional()
4840
});

0 commit comments

Comments
 (0)