diff --git a/server/src/entities/group_permissions.entity.ts b/server/src/entities/group_permissions.entity.ts index 693f4f930c..92868d7510 100644 --- a/server/src/entities/group_permissions.entity.ts +++ b/server/src/entities/group_permissions.entity.ts @@ -3,6 +3,7 @@ import { Column, CreateDateColumn, Entity, + Index, JoinColumn, ManyToOne, OneToMany, @@ -20,6 +21,7 @@ export class GroupPermissions extends BaseEntity { @PrimaryGeneratedColumn('uuid') id: string; + @Index() @Column({ name: 'organization_id', nullable: false }) organizationId: string; diff --git a/server/src/entities/group_users.entity.ts b/server/src/entities/group_users.entity.ts index 03ac55386b..29771a5557 100644 --- a/server/src/entities/group_users.entity.ts +++ b/server/src/entities/group_users.entity.ts @@ -3,6 +3,7 @@ import { Column, CreateDateColumn, Entity, + Index, JoinColumn, ManyToOne, PrimaryGeneratedColumn, @@ -16,9 +17,11 @@ export class GroupUsers extends BaseEntity { @PrimaryGeneratedColumn('uuid') id: string; + @Index() @Column({ name: 'user_id', nullable: false }) userId: string; + @Index() @Column({ name: 'group_id', nullable: false }) groupId: string; diff --git a/server/src/entities/page_users.entity.ts b/server/src/entities/page_users.entity.ts index 960be5b32f..ca3ef77c65 100644 --- a/server/src/entities/page_users.entity.ts +++ b/server/src/entities/page_users.entity.ts @@ -1,4 +1,4 @@ -import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, CreateDateColumn } from 'typeorm'; +import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, CreateDateColumn, Index } from 'typeorm'; import { User } from './user.entity'; import { PagePermission } from './page_permissions.entity'; import { GroupPermissions } from './group_permissions.entity'; @@ -8,12 +8,15 @@ export class PageUser { @PrimaryGeneratedColumn('uuid') id: string; + @Index() @Column({ name: 'page_permissions_id', type: 'uuid' }) pagePermissionsId: string; + @Index() @Column({ name: 'user_id', type: 'uuid', nullable: true }) userId: string | null; + @Index() @Column({ name: 'permission_groups_id', type: 'uuid', nullable: true }) permissionGroupsId: string | null; diff --git a/server/src/modules/app-permissions/repositories/page-permissions.repository.ts b/server/src/modules/app-permissions/repositories/page-permissions.repository.ts index 41c4741dc2..7caa5f4318 100644 --- a/server/src/modules/app-permissions/repositories/page-permissions.repository.ts +++ b/server/src/modules/app-permissions/repositories/page-permissions.repository.ts @@ -13,10 +13,21 @@ export class PagePermissionsRepository extends Repository { async getPagePermissions(pageId: string, manager?: EntityManager): Promise { return dbTransactionWrap(async (manager: EntityManager) => { - return manager.find(PagePermission, { + const pagePermissions = await manager.find(PagePermission, { where: { pageId }, relations: ['users', 'users.user', 'users.permissionGroup'], }); + + return pagePermissions.map((permission) => { + if (permission.type === PAGE_PERMISSION_TYPE.GROUP) { + return { + ...permission, + groups: permission.users, + users: undefined, + }; + } + return permission; + }); }, manager || this.manager); } @@ -26,6 +37,11 @@ export class PagePermissionsRepository extends Repository { manager?: EntityManager ): Promise { return dbTransactionWrap(async (manager: EntityManager) => { + const existingPermission = await manager.findOne(PagePermission, { where: { pageId } }); + if (existingPermission) { + throw new Error(`Page permission already exists for Page id: ${pageId}`); + } + const pagePermission = manager.create(PagePermission, { pageId, type,