import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { isDefined } from 'twenty-shared'; import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service'; import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { ADMIN_ROLE_LABEL } from 'src/engine/metadata-modules/permissions/constants/admin-role-label.constants'; import { PermissionsException, PermissionsExceptionCode, } from 'src/engine/metadata-modules/permissions/permissions.exception'; import { RoleEntity } from 'src/engine/metadata-modules/permissions/role.entity'; import { UserWorkspaceRoleEntity } from 'src/engine/metadata-modules/permissions/user-workspace-role.entity'; @Injectable() export class PermissionsService { constructor( @InjectRepository(RoleEntity, 'metadata') private readonly roleRepository: Repository, @InjectRepository(UserWorkspaceRoleEntity, 'metadata') private readonly userWorkspaceRoleRepository: Repository, @InjectRepository(UserWorkspace, 'core') private readonly userWorkspaceRepository: Repository, private readonly environmentService: EnvironmentService, ) {} public async createAdminRole({ workspaceId, }: { workspaceId: string; }): Promise { return this.roleRepository.save({ label: ADMIN_ROLE_LABEL, description: 'Admin role', canUpdateAllSettings: true, isEditable: false, workspaceId, }); } public async assignRoleToUserWorkspace({ workspaceId, userWorkspaceId, roleId, }: { workspaceId: string; userWorkspaceId: string; roleId: string; }): Promise { const userWorkspace = await this.userWorkspaceRepository.findOne({ where: { id: userWorkspaceId, }, }); if (!isDefined(userWorkspace)) { throw new PermissionsException( 'User workspace not found', PermissionsExceptionCode.USER_WORKSPACE_NOT_FOUND, ); } await this.userWorkspaceRoleRepository.save({ roleId, userWorkspaceId: userWorkspace.id, workspaceId, }); } public async isPermissionsEnabled(): Promise { return this.environmentService.get('PERMISSIONS_ENABLED') === true; } }