feat(api): Overhaul Role API, add ability to edit roles and assign/unassign them from any user

This commit is contained in:
Jesse Wierzbinski 2024-11-26 15:27:39 +01:00
parent 7431c1e21d
commit 49c53de99e
No known key found for this signature in database
10 changed files with 926 additions and 153 deletions

View file

@ -22,13 +22,13 @@ type RoleType = InferSelectModel<typeof Roles>;
export class Role extends BaseInterface<typeof Roles> {
public static schema = z.object({
id: z.string(),
name: z.string(),
id: z.string().uuid(),
name: z.string().min(1).max(128),
permissions: z.array(z.nativeEnum(RolePermission)),
priority: z.number(),
description: z.string().nullable(),
priority: z.number().int(),
description: z.string().min(0).max(1024).nullable(),
visible: z.boolean(),
icon: z.string().nullable(),
icon: z.string().url().nullable(),
});
public static $type: RoleType;
@ -70,6 +70,29 @@ export class Role extends BaseInterface<typeof Roles> {
return new Role(found);
}
public static async getAll(): Promise<Role[]> {
return (await Role.manyFromSql(undefined)).concat(
new Role({
id: "default",
name: "Default",
permissions: config.permissions.default,
priority: 0,
description: "Default role for all users",
visible: false,
icon: null,
}),
new Role({
id: "admin",
name: "Admin",
permissions: config.permissions.admin,
priority: 2 ** 31 - 1,
description: "Default role for all administrators",
visible: false,
icon: null,
}),
);
}
public static async getUserRoles(
userId: string,
isAdmin: boolean,