diff --git a/server/src/entities/component.entity.ts b/server/src/entities/component.entity.ts index bb22c7dcd4..6ef8d20b0c 100644 --- a/server/src/entities/component.entity.ts +++ b/server/src/entities/component.entity.ts @@ -11,6 +11,7 @@ import { } from 'typeorm'; import { Page } from './page.entity'; import { Layout } from './layout.entity'; +import { ComponentPermission } from './component_permissions.entity'; @Entity({ name: 'components' }) @Index('idx_component_page_id', ['pageId']) @@ -60,4 +61,7 @@ export class Component { @OneToMany(() => Layout, (layout) => layout.component) layouts: Layout[]; + + @OneToMany(() => ComponentPermission, (permission) => permission.component) + permissions: ComponentPermission[]; } diff --git a/server/src/entities/component_permissions.entity.ts b/server/src/entities/component_permissions.entity.ts new file mode 100644 index 0000000000..9ed804eb4e --- /dev/null +++ b/server/src/entities/component_permissions.entity.ts @@ -0,0 +1,29 @@ +import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, CreateDateColumn, OneToMany } from 'typeorm'; +import { Component } from './component.entity'; +import { PAGE_PERMISSION_TYPE } from '@modules/app-permissions/constants'; +import { ComponentUser } from './component_users.entity'; + +@Entity('component_permissions') +export class ComponentPermission { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ name: 'component_id', type: 'uuid', nullable: false }) + componentId: string; + + @Column({ + type: 'enum', + enum: PAGE_PERMISSION_TYPE, + }) + type: PAGE_PERMISSION_TYPE; + + @CreateDateColumn({ name: 'created_at' }) + createdAt: Date; + + @ManyToOne(() => Component, (component) => component.permissions, { onDelete: 'CASCADE' }) + @JoinColumn({ name: 'component_id' }) + component: Component; + + @OneToMany(() => ComponentUser, (componentUser) => componentUser.componentPermission) + users: ComponentUser[]; +} diff --git a/server/src/entities/component_users.entity.ts b/server/src/entities/component_users.entity.ts new file mode 100644 index 0000000000..2728297e3b --- /dev/null +++ b/server/src/entities/component_users.entity.ts @@ -0,0 +1,34 @@ +import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, CreateDateColumn } from 'typeorm'; +import { User } from './user.entity'; +import { ComponentPermission } from './component_permissions.entity'; +import { GroupPermissions } from './group_permissions.entity'; + +@Entity('component_users') +export class ComponentUser { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ name: 'component_permissions_id', type: 'uuid' }) + componentPermissionsId: string; + + @Column({ name: 'user_id', type: 'uuid', nullable: true }) + userId: string | null; + + @Column({ name: 'permission_groups_id', type: 'uuid', nullable: true }) + permissionGroupsId: string | null; + + @CreateDateColumn({ name: 'created_at' }) + createdAt: Date; + + @ManyToOne(() => ComponentPermission, { onDelete: 'CASCADE' }) + @JoinColumn({ name: 'component_permissions_id' }) + componentPermission: ComponentPermission; + + @ManyToOne(() => User, { onDelete: 'CASCADE', nullable: true }) + @JoinColumn({ name: 'user_id' }) + user: User; + + @ManyToOne(() => GroupPermissions, { onDelete: 'CASCADE', nullable: true }) + @JoinColumn({ name: 'permission_groups_id' }) + permissionGroup: GroupPermissions; +} diff --git a/server/src/entities/group_permissions.entity.ts b/server/src/entities/group_permissions.entity.ts index 0ff6e47b0b..dfc6256ebd 100644 --- a/server/src/entities/group_permissions.entity.ts +++ b/server/src/entities/group_permissions.entity.ts @@ -15,6 +15,7 @@ import { GranularPermissions } from './granular_permissions.entity'; import { GROUP_PERMISSIONS_TYPE } from '@modules/group-permissions/constants'; import { PageUser } from './page_users.entity'; import { QueryUser } from './query_users.entity'; +import { ComponentUser } from './component_users.entity'; @Entity({ name: 'permission_groups' }) export class GroupPermissions extends BaseEntity { @@ -70,5 +71,8 @@ export class GroupPermissions extends BaseEntity { @OneToMany(() => QueryUser, (queryUser) => queryUser.permissionGroup) queryUsers: QueryUser[]; + @OneToMany(() => ComponentUser, (componentUser) => componentUser.permissionGroup) + componentUsers: ComponentUser[]; + disabled?: boolean; } diff --git a/server/src/entities/user.entity.ts b/server/src/entities/user.entity.ts index 515b1f469e..f43396f0ed 100644 --- a/server/src/entities/user.entity.ts +++ b/server/src/entities/user.entity.ts @@ -31,6 +31,7 @@ import { AiResponseVote } from './ai_response_vote.entity'; import { USER_ROLE } from '@modules/group-permissions/constants'; import { PageUser } from './page_users.entity'; import { QueryUser } from './query_users.entity'; +import { ComponentUser } from './component_users.entity'; @Entity({ name: 'users' }) export class User extends BaseEntity { @@ -192,6 +193,9 @@ export class User extends BaseEntity { @OneToMany(() => QueryUser, (queryUser) => queryUser.user) queryUsers: QueryUser[]; + @OneToMany(() => ComponentUser, (componentUser) => componentUser.user) + componentUsers: ComponentUser[]; + organizationId: string; invitedOrganizationId: string; organizationIds?: Array;