Files
CRM_Montzar/apps/api/src/org-roles/dto.ts
T
MahdiandCursor 1ccbefa7a3 fix(treasury): scope finance access and hide it when the module is off
Accounts can be edited, including the opening balance, and finance sections and accounts can be granted on a role or on one user. The finance menu stays hidden when the organization module is disabled.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-04 10:02:31 +03:30

119 lines
2.2 KiB
TypeScript

import { Type } from 'class-transformer';
import {
ArrayUnique,
IsArray,
IsBoolean,
IsIn,
IsObject,
IsOptional,
IsString,
MaxLength,
MinLength,
ValidateIf,
ValidateNested,
} from 'class-validator';
import { ROLE_PERMISSION_ITEMS, type RolePermissionKey } from '@mento/shared';
import { ROLE_COLORS } from './role-defaults';
const PERMISSION_KEYS = ROLE_PERMISSION_ITEMS.map((item) => item.key);
export class CreateOrgRoleDto {
@IsString()
@MinLength(2)
@MaxLength(80)
name!: string;
@IsOptional()
@IsString()
@MaxLength(280)
description?: string;
@IsOptional()
@IsIn([...ROLE_COLORS])
color?: (typeof ROLE_COLORS)[number];
@IsOptional()
@IsArray()
@ArrayUnique()
@IsIn(PERMISSION_KEYS, { each: true })
permissions?: RolePermissionKey[];
@IsOptional()
@IsObject()
dataAccessPolicy?: Record<string, unknown>;
@IsOptional()
@ValidateIf((_, v) => v !== null)
@IsString()
parentId?: string | null;
@IsOptional()
@IsArray()
@ArrayUnique()
@IsString({ each: true })
treasuryAccountIds?: string[];
@IsOptional()
@IsBoolean()
treasuryOwnAccounts?: boolean;
}
export class UpdateOrgRoleDto {
@IsOptional()
@IsString()
@MinLength(2)
@MaxLength(80)
name?: string;
@IsOptional()
@IsString()
@MaxLength(280)
description?: string;
@IsOptional()
@IsIn([...ROLE_COLORS])
color?: (typeof ROLE_COLORS)[number];
@IsOptional()
@IsArray()
@ArrayUnique()
@IsIn(PERMISSION_KEYS, { each: true })
permissions?: RolePermissionKey[];
@IsOptional()
@IsObject()
dataAccessPolicy?: Record<string, unknown>;
@IsOptional()
@ValidateIf((_, v) => v !== null)
@IsString()
parentId?: string | null;
@IsOptional()
@IsArray()
@ArrayUnique()
@IsString({ each: true })
treasuryAccountIds?: string[];
@IsOptional()
@IsBoolean()
treasuryOwnAccounts?: boolean;
}
export class RolePermissionPatchItemDto {
@IsString()
id!: string;
@IsArray()
@ArrayUnique()
@IsIn(PERMISSION_KEYS, { each: true })
permissions!: RolePermissionKey[];
}
export class BulkUpdatePermissionsDto {
@IsArray()
@ValidateNested({ each: true })
@Type(() => RolePermissionPatchItemDto)
items!: RolePermissionPatchItemDto[];
}