diff --git a/server/migrations/1720352990850-CreateDefaultGroupInExistingWorkspace.ts b/server/migrations/1720352990850-CreateDefaultGroupInExistingWorkspace.ts index b204b46aeb..dfb1e57def 100644 --- a/server/migrations/1720352990850-CreateDefaultGroupInExistingWorkspace.ts +++ b/server/migrations/1720352990850-CreateDefaultGroupInExistingWorkspace.ts @@ -22,31 +22,42 @@ import { EntityManager, MigrationInterface, QueryRunner } from 'typeorm'; export class CreateDefaultGroupInExistingWorkspace1720352990850 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { const manager = queryRunner.manager; - const organizationIds = await manager.find(Organization, { - select: ['id'], - }); - for (const organizationId in organizationIds) { + const organizationIds = ( + await manager.find(Organization, { + select: ['id'], + }) + ).map((organization) => organization.id); + + for (const organizationId of organizationIds) { for (const defaultGroup of Object.keys(USER_ROLE)) { const groupPermissions = DEFAULT_GROUP_PERMISSIONS[defaultGroup]; const query = ` - INSERT INTO permission_groups ( - organization_id, - name, - type, - app_create, - app_delete, - folder_crud, - org_constant_crud, - data_source_create, - data_source_delete, - - ) VALUES ( - ${organizationId} , ${groupPermissions.name} , ${groupPermissions.type},${groupPermissions.appCreate}, ${groupPermissions.appDelete} - , ${groupPermissions.folderCRUD}, ${groupPermissions.orgConstantCRUD}, ${groupPermissions.dataSourceCreate}, ${groupPermissions.dataSourceDelete} - ) RETURNING *;`; - const group: GroupPermissions = await manager.query(query); + INSERT INTO permission_groups ( + organization_id, + name, + type, + app_create, + app_delete, + folder_crud, + org_constant_crud, + data_source_create, + data_source_delete + ) VALUES ( + '${organizationId}', + '${groupPermissions.name}', + '${groupPermissions.type}', + ${groupPermissions.appCreate}, + ${groupPermissions.appDelete}, + ${groupPermissions.folderCRUD}, + ${groupPermissions.orgConstantCRUD}, + ${groupPermissions.dataSourceCreate}, + ${groupPermissions.dataSourceDelete} + ) RETURNING *; + `; + const group: GroupPermissions = (await manager.query(query))[0]; const groupGranularPermissions: Record = DEFAULT_RESOURCE_PERMISSIONS[group.name]; + for (const resource of Object.keys(groupGranularPermissions)) { const createResourcePermissionObj: CreateResourcePermissionObject = groupGranularPermissions[resource]; const dtoObject = { @@ -54,6 +65,7 @@ export class CreateDefaultGroupInExistingWorkspace1720352990850 implements Migra groupId: group.id, type: resource as ResourceType, isAll: true, + createAppsPermissionsObject: {}, }; const granularPermissions = await this.createGranularPermission(manager, dtoObject); await this.createAppsResourcePermission( @@ -67,14 +79,14 @@ export class CreateDefaultGroupInExistingWorkspace1720352990850 implements Migra const adminsUsers = await manager .createQueryBuilder(UserGroupPermission, 'usersGroup') .innerJoin( - 'userGroup.groupPermission', + 'usersGroup.groupPermission', 'groupPermission', - 'groupPermission.organizationId := organizationId', + 'groupPermission.organizationId = :organizationId', { organizationId, } ) - .where('groupPermission.group := admin', { + .where('groupPermission.group = :admin', { admin: 'admin', }) .getMany(); @@ -90,16 +102,16 @@ export class CreateDefaultGroupInExistingWorkspace1720352990850 implements Migra createObject: CreateGranularPermissionDto ): Promise { const query = ` - INSERT INTO granular_permissions ( - group_id, - name, - type, - is_all, - - ) VALUES ( - ${createObject.groupId} , ${createObject.name} , ${createObject.type},${createObject.isAll} - ) RETURNING *;`; - return await manager.query(query); + INSERT INTO granular_permissions ( + group_id, + name, + type, + is_all + ) VALUES ( + '${createObject.groupId}', '${createObject.name}', '${createObject.type}', ${createObject.isAll} + ) RETURNING *; + `; + return (await manager.query(query))[0]; } async createAppsResourcePermission( @@ -109,24 +121,25 @@ export class CreateDefaultGroupInExistingWorkspace1720352990850 implements Migra ): Promise { const { granularPermissions } = createMeta; const query = ` - INSERT INTO apps_group_permissions ( - granular_permission_id, - can_edit, - can_view, - hide_from_dashboard, - - ) VALUES ( - ${granularPermissions.id} , ${createObject.canEdit} , ${createObject.canView},${createObject.hideFromDashboard} - ) RETURNING *;`; - return await manager.query(query); + INSERT INTO apps_group_permissions ( + granular_permission_id, + can_edit, + can_view, + hide_from_dashboard + ) VALUES ( + '${granularPermissions.id}', ${createObject.canEdit}, ${createObject.canView}, ${createObject.hideFromDashboard} + ) RETURNING *; + `; + return (await manager.query(query))[0]; } async migrateUserGroup(manager: EntityManager, userIds: string[], groupId: string) { - const valuesString = `( ${userIds.map((id) => `(${id}, ${groupId} )`).join(',')} )`; - const query = `INSERT INTO group_users ( - user_id, - group_id - ) VALUES ${valuesString}`; + if (userIds.length == 0) return; + const valuesString = userIds.map((id) => `('${id}', '${groupId}')`).join(','); + const query = ` + INSERT INTO group_users (user_id, group_id) + VALUES ${valuesString}; + `; return await manager.query(query); } diff --git a/server/migrations/1720365772516-AddingUsersToRespectiveRolesBuilderAndEndUsers.ts b/server/migrations/1720365772516-AddingUsersToRespectiveRolesBuilderAndEndUsers.ts index 874cc3cd72..25463d3ca7 100644 --- a/server/migrations/1720365772516-AddingUsersToRespectiveRolesBuilderAndEndUsers.ts +++ b/server/migrations/1720365772516-AddingUsersToRespectiveRolesBuilderAndEndUsers.ts @@ -25,9 +25,14 @@ export class AddingUsersToRespectiveRolesBuilderAndEndUsers1720365772516 impleme const userIdsWithEditPermissions = ( await manager .createQueryBuilder(User, 'users') - .innerJoin('users.organizationUsers', 'organization_users', 'organization_users.organizationId := ', { - organizationId, - }) + .innerJoin( + 'users.organizationUsers', + 'organization_users', + 'organization_users.organizationId = :organizationId ', + { + organizationId, + } + ) .innerJoin( 'users.groupPermissions', 'group_permissions', @@ -49,9 +54,14 @@ export class AddingUsersToRespectiveRolesBuilderAndEndUsers1720365772516 impleme const userIdsOfAppOwners = ( await manager .createQueryBuilder(User, 'users') - .innerJoin('users.organizationUsers', 'organization_users', 'organization_users.organizationId := ', { - organizationId, - }) + .innerJoin( + 'users.organizationUsers', + 'organization_users', + 'organization_users.organizationId = :organizationId', + { + organizationId, + } + ) .innerJoin('users.apps', 'apps') .select('users.id') .distinct() @@ -62,14 +72,14 @@ export class AddingUsersToRespectiveRolesBuilderAndEndUsers1720365772516 impleme await manager .createQueryBuilder(UserGroupPermission, 'usersGroup') .innerJoin( - 'userGroup.groupPermission', + 'usersGroup.groupPermission', 'groupPermission', - 'groupPermission.organizationId := organizationId', + 'groupPermission.organizationId = :organizationId', { organizationId, } ) - .where('groupPermission.name := admin', { + .where('groupPermission.group = :admin', { admin: 'admin', }) .getMany() @@ -82,6 +92,10 @@ export class AddingUsersToRespectiveRolesBuilderAndEndUsers1720365772516 impleme const endUserGroup = await manager.findOne(GroupPermissions, { where: { name: USER_ROLE.END_USER, type: GROUP_PERMISSIONS_TYPE.DEFAULT, organizationId: organizationId }, }); + + console.log('Builders users'); + console.log(builderUsersWoAdmin); + await this.migrateUserGroup(manager, builderUsersWoAdmin, builderGroup.id); const organizationUser = ( await manager.find(OrganizationUser, { @@ -97,11 +111,12 @@ export class AddingUsersToRespectiveRolesBuilderAndEndUsers1720365772516 impleme } async migrateUserGroup(manager: EntityManager, userIds: string[], groupId: string) { - const valuesString = `( ${userIds.map((id) => `(${id}, ${groupId} )`).join(',')} )`; - const query = `INSERT INTO group_users ( - user_id, - group_id - ) VALUES ${valuesString}`; + if (userIds.length === 0) return; + const valuesString = userIds.map((id) => `('${id}', '${groupId}')`).join(','); + const query = ` + INSERT INTO group_users (user_id, group_id) + VALUES ${valuesString}; + `; return await manager.query(query); } diff --git a/server/migrations/1720434737529-MigrateCustomGroupToNewUserGroup.ts b/server/migrations/1720434737529-MigrateCustomGroupToNewUserGroup.ts index 21fa7cc45c..bd76418d12 100644 --- a/server/migrations/1720434737529-MigrateCustomGroupToNewUserGroup.ts +++ b/server/migrations/1720434737529-MigrateCustomGroupToNewUserGroup.ts @@ -30,12 +30,12 @@ export class MigrateCustomGroupToNewUserGroup1720434737529 implements MigrationI for (const organizationId of organizationIds) { const groups = await manager .createQueryBuilder(GroupPermission, 'groupPermission') - .where('groupPermission.organizationId := organizationId', { + .where('groupPermission.organizationId = :organizationId', { organizationId, }) .innerJoinAndSelect('groupPermission.appGroupPermission', 'appGroupPermission') .innerJoinAndSelect('groupPermission.userGroupPermission', 'userGroupPermission') - .andWhere('groupPermission.group != admin', { + .andWhere('groupPermission.group != :admin', { admin: 'admin', }) .getMany(); @@ -56,7 +56,7 @@ export class MigrateCustomGroupToNewUserGroup1720434737529 implements MigrationI ${organizationId} , ${groupPermissions.group} , ${GROUP_PERMISSIONS_TYPE.CUSTOM_GROUP},${groupPermissions.appCreate}, ${groupPermissions.appDelete} , ${groupPermissions.folderCreate}, ${groupPermissions.orgEnvironmentConstantCreate}, false , false ) RETURNING *;`; - const group: GroupPermissions = await manager.query(query); + const group: GroupPermissions = (await manager.query(query))[0]; const existingGroupUsers = groupPermissions.userGroupPermission; await this.migrateUserGroup( manager, @@ -132,12 +132,9 @@ export class MigrateCustomGroupToNewUserGroup1720434737529 implements MigrationI ) VALUES ( ${createObject.groupId} , ${createObject.name} , ${createObject.type},${createObject.isAll} ) RETURNING *;`; - return await manager.query(query); + return (await manager.query(query))[0]; } - //Add check custom_builder , custom_end-user, --> - // All users permissions.. - async createAppsResourcePermission( manager: EntityManager, createMeta: ResourcePermissionMetaData, @@ -145,16 +142,19 @@ export class MigrateCustomGroupToNewUserGroup1720434737529 implements MigrationI ): Promise { const { granularPermissions } = createMeta; const query = ` - INSERT INTO apps_group_permissions ( - granular_permission_id, - can_edit, - can_view, - hide_from_dashboard, - - ) VALUES ( - ${granularPermissions.id} , ${createObject.canEdit} , ${createObject.canView},${createObject.hideFromDashboard} - ) RETURNING *;`; - return await manager.query(query); + INSERT INTO apps_group_permissions ( + granular_permission_id, + can_edit, + can_view, + hide_from_dashboard + ) VALUES ( + ${granularPermissions.id}, + ${createObject.canEdit}, + ${createObject.canView}, + ${createObject.hideFromDashboard} + ) RETURNING *; + `; + return (await manager.query(query))[0]; } async migrateUserGroup(manager: EntityManager, userIds: string[], groupId: string) { @@ -167,11 +167,11 @@ export class MigrateCustomGroupToNewUserGroup1720434737529 implements MigrationI } async addAppsGroupToPermissions(manager: EntityManager, appIds: string[], appPermissionsId: string) { - const valuesString = `( ${appIds.map((id) => `(${id}, ${appPermissionsId} )`).join(',')} )`; - const query = `INSERT INTO group_apps ( - app_id, - apps_group_permissions_id - ) VALUES ${valuesString}`; + const valuesString = appIds.map((id) => `('${id}', '${appPermissionsId}')`).join(','); + const query = ` + INSERT INTO group_apps (app_id, apps_group_permissions_id) + VALUES ${valuesString}; + `; return await manager.query(query); } @@ -190,6 +190,7 @@ export class MigrateCustomGroupToNewUserGroup1720434737529 implements MigrationI groupId: group.id, type: resource as ResourceType, isAll: false, + createAppsPermissionsObject: {}, }; const granularPermissions = await this.createGranularPermission(manager, dtoObject); const appsGroupPermissions = await this.createAppsResourcePermission( diff --git a/server/src/dto/granular-permissions.dto.ts b/server/src/dto/granular-permissions.dto.ts index f26f87c990..33e94ca1b2 100644 --- a/server/src/dto/granular-permissions.dto.ts +++ b/server/src/dto/granular-permissions.dto.ts @@ -5,6 +5,7 @@ import { ResourceGroupActions, GranularPermissionAddResourceItems, GranularPermissionDeleteResourceItems, + CreateAppsPermissionsObject, } from '@module/user_resource_permissions/interface/granular-permissions.interface'; export class CreateGranularPermissionDto { @@ -25,6 +26,9 @@ export class CreateGranularPermissionDto { @IsNotEmpty() type: ResourceType; + @IsOptional() + createAppsPermissionsObject: CreateAppsPermissionsObject; + // @IsBoolean() // @IsOptional() // allowRoleChange: boolean; diff --git a/server/src/services/user-role.service.ts b/server/src/services/user-role.service.ts index 7260cc888a..a2de5c8b5e 100644 --- a/server/src/services/user-role.service.ts +++ b/server/src/services/user-role.service.ts @@ -54,6 +54,7 @@ export class UserRoleService { groupId: group.id, type: resource as ResourceType, isAll: true, + createAppsPermissionsObject: {}, }; await this.granularPermissionsService.create( {