diff --git a/backend/src/entities/table-settings/repository/table-settings-custom-repository-extension.ts b/backend/src/entities/table-settings/repository/table-settings-custom-repository-extension.ts index a03c1923d..c0aefcb7b 100644 --- a/backend/src/entities/table-settings/repository/table-settings-custom-repository-extension.ts +++ b/backend/src/entities/table-settings/repository/table-settings-custom-repository-extension.ts @@ -4,13 +4,30 @@ import { ConnectionEntity } from '../../connection/connection.entity.js'; import { CreateTableSettingsDs } from '../application/data-structures/create-table-settings.ds.js'; import { TableSettingsEntity } from '../table-settings.entity.js'; import { buildNewTableSettingsEntity } from '../utils/build-new-table-settings-entity.js'; -import { ITableSettingsRepository } from './table-settings.repository.interface.js'; +import { FoundTableSettingsData, ITableSettingsRepository } from './table-settings.repository.interface.js'; export const tableSettingsCustomRepositoryExtension: ITableSettingsRepository = { async saveNewOrUpdatedSettings(settings: TableSettingsEntity): Promise { return await this.save(settings); }, + async findTableCustoms(connectionId: string, tableName: string): Promise { + const qb = this.createQueryBuilder('tableSettings') + .leftJoinAndSelect('tableSettings.custom_fields', 'custom_fields') + .leftJoinAndSelect('tableSettings.table_widgets', 'table_widgets') + .where('tableSettings.connection_id = :connection_id', { + connection_id: connectionId, + }) + .andWhere('tableSettings.table_name = :table_name', { table_name: tableName }); + + const foundTableSettings = await qb.getOne(); + return { + tableSettings: foundTableSettings || null, + tableCustomFields: foundTableSettings ? foundTableSettings.custom_fields : [], + tableWidgets: foundTableSettings ? foundTableSettings.table_widgets : [], + }; + }, + async createNewTableSettings(settings: CreateTableSettingsDs): Promise { const connectionQB = this.manager .getRepository(ConnectionEntity) diff --git a/backend/src/entities/table-settings/repository/table-settings.repository.interface.ts b/backend/src/entities/table-settings/repository/table-settings.repository.interface.ts index 19ebc6035..983964f48 100644 --- a/backend/src/entities/table-settings/repository/table-settings.repository.interface.ts +++ b/backend/src/entities/table-settings/repository/table-settings.repository.interface.ts @@ -1,7 +1,16 @@ +import { CustomFieldsEntity } from '../../custom-field/custom-fields.entity.js'; +import { TableWidgetEntity } from '../../widget/table-widget.entity.js'; import { CreateTableSettingsDs } from '../application/data-structures/create-table-settings.ds.js'; import { TableSettingsEntity } from '../table-settings.entity.js'; +export type FoundTableSettingsData = { + tableSettings: TableSettingsEntity; + tableCustomFields: Array; + tableWidgets: Array; +}; export interface ITableSettingsRepository { + findTableCustoms(connectionId: string, tableName: string): Promise; + saveNewOrUpdatedSettings(settings: TableSettingsEntity): Promise; findTableSettingsWithCustomFields(connectionId: string, tableName: string): Promise; diff --git a/backend/src/entities/table/use-cases/get-table-rows.use.case.ts b/backend/src/entities/table/use-cases/get-table-rows.use.case.ts index ae1235665..8e646883f 100644 --- a/backend/src/entities/table/use-cases/get-table-rows.use.case.ts +++ b/backend/src/entities/table/use-cases/get-table-rows.use.case.ts @@ -86,25 +86,23 @@ export class GetTableRowsUseCase extends AbstractUseCase (permission.type === PermissionTypeEnum.Connection && permission.accessLevel === AccessLevelEnum.edit) || (permission.type === PermissionTypeEnum.Table && permission.tableName === tableName && [AccessLevelEnum.visibility, AccessLevelEnum.add, AccessLevelEnum.delete, AccessLevelEnum.edit].includes( permission.accessLevel as AccessLevelEnum, - )) - ) { - Cacher.setUserTableReadPermissionCache(userId, connectionId, tableName, true); - return true; - } + )), + ); + + if (hasReadPermission) { + Cacher.setUserTableReadPermissionCache(userId, connectionId, tableName, true); + return true; } Cacher.setUserTableReadPermissionCache(userId, connectionId, tableName, false); diff --git a/backend/test/ava-tests/saas-tests/table-postgres-e2e.test.ts b/backend/test/ava-tests/saas-tests/table-postgres-e2e.test.ts index 3b9abfb2b..0e9bbeb4c 100644 --- a/backend/test/ava-tests/saas-tests/table-postgres-e2e.test.ts +++ b/backend/test/ava-tests/saas-tests/table-postgres-e2e.test.ts @@ -1901,10 +1901,9 @@ test.serial(`${currentTest} should throw an exception when table name passed in .set('Cookie', firstUserToken) .set('Content-Type', 'application/json') .set('Accept', 'application/json'); - t.is(getTableRowsResponse.status, 400); const { message } = JSON.parse(getTableRowsResponse.text); - + t.is(getTableRowsResponse.status, 400); t.is(message, Messages.TABLE_NOT_FOUND); } catch (e) { console.error(e);