# Introduction Avoid having multiple `isDefined` definition across our pacakges Also avoid importing `isDefined` from `twenty-ui` which exposes a huge barrel for a such little util function ## In a nutshell Removed own `isDefined.ts` definition from `twenty-ui` `twenty-front` and `twenty-server` to move it to `twenty-shared`. Updated imports for each packages, and added explicit dependencies to `twenty-shared` if not already in place Related PR https://github.com/twentyhq/twenty/pull/9941
75 lines
2.3 KiB
TypeScript
75 lines
2.3 KiB
TypeScript
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<RoleEntity>,
|
|
@InjectRepository(UserWorkspaceRoleEntity, 'metadata')
|
|
private readonly userWorkspaceRoleRepository: Repository<UserWorkspaceRoleEntity>,
|
|
@InjectRepository(UserWorkspace, 'core')
|
|
private readonly userWorkspaceRepository: Repository<UserWorkspace>,
|
|
private readonly environmentService: EnvironmentService,
|
|
) {}
|
|
|
|
public async createAdminRole({
|
|
workspaceId,
|
|
}: {
|
|
workspaceId: string;
|
|
}): Promise<RoleEntity> {
|
|
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<void> {
|
|
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<boolean> {
|
|
return this.environmentService.get('PERMISSIONS_ENABLED') === true;
|
|
}
|
|
}
|