diff --git a/server/src/entities/data_query.entity.ts b/server/src/entities/data_query.entity.ts index 49e5b1f1a5..7e3a8d25a5 100644 --- a/server/src/entities/data_query.entity.ts +++ b/server/src/entities/data_query.entity.ts @@ -10,11 +10,13 @@ import { JoinTable, ManyToMany, AfterLoad, + OneToMany, } from 'typeorm'; import { App } from './app.entity'; import { AppVersion } from './app_version.entity'; import { DataSource } from './data_source.entity'; import { Plugin } from './plugin.entity'; +import { QueryPermission } from './query_permissions.entity'; @Entity({ name: 'data_queries' }) export class DataQuery extends BaseEntity { @@ -81,6 +83,9 @@ export class DataQuery extends BaseEntity { app: App; + @OneToMany(() => QueryPermission, (permission) => permission.query) + permissions: QueryPermission[]; + @AfterLoad() updatePlugin() { if (this.plugins?.length) this.plugin = this.plugins[0]; diff --git a/server/src/entities/group_permissions.entity.ts b/server/src/entities/group_permissions.entity.ts index 693f4f930c..0ff6e47b0b 100644 --- a/server/src/entities/group_permissions.entity.ts +++ b/server/src/entities/group_permissions.entity.ts @@ -14,6 +14,7 @@ import { GroupUsers } from './group_users.entity'; 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'; @Entity({ name: 'permission_groups' }) export class GroupPermissions extends BaseEntity { @@ -66,5 +67,8 @@ export class GroupPermissions extends BaseEntity { @OneToMany(() => PageUser, (pageUser) => pageUser.permissionGroup) pageUsers: PageUser[]; + @OneToMany(() => QueryUser, (queryUser) => queryUser.permissionGroup) + queryUsers: QueryUser[]; + disabled?: boolean; } diff --git a/server/src/entities/query_permissions.entity.ts b/server/src/entities/query_permissions.entity.ts new file mode 100644 index 0000000000..c693c6b994 --- /dev/null +++ b/server/src/entities/query_permissions.entity.ts @@ -0,0 +1,29 @@ +import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, CreateDateColumn, OneToMany } from 'typeorm'; +import { DataQuery } from './data_query.entity'; +import { QueryUser } from './query_users.entity'; +import { PAGE_PERMISSION_TYPE } from '@modules/app-permissions/constants'; + +@Entity('query_permissions') +export class QueryPermission { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ name: 'query_id', type: 'uuid', nullable: false }) + queryId: string; + + @Column({ + type: 'enum', + enum: PAGE_PERMISSION_TYPE, + }) + type: PAGE_PERMISSION_TYPE; + + @CreateDateColumn({ name: 'created_at' }) + createdAt: Date; + + @ManyToOne(() => DataQuery, (query) => query.permissions, { onDelete: 'CASCADE' }) + @JoinColumn({ name: 'query_id' }) + query: DataQuery; + + @OneToMany(() => QueryUser, (queryUser) => queryUser.queryPermission) + users: QueryUser[]; +} diff --git a/server/src/entities/query_users.entity.ts b/server/src/entities/query_users.entity.ts new file mode 100644 index 0000000000..46b16be0af --- /dev/null +++ b/server/src/entities/query_users.entity.ts @@ -0,0 +1,34 @@ +import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, CreateDateColumn } from 'typeorm'; +import { User } from './user.entity'; +import { QueryPermission } from './query_permissions.entity'; +import { GroupPermissions } from './group_permissions.entity'; + +@Entity('query_users') +export class QueryUser { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ name: 'query_permissions_id', type: 'uuid' }) + queryPermissionsId: 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(() => QueryPermission, { onDelete: 'CASCADE' }) + @JoinColumn({ name: 'query_permissions_id' }) + queryPermission: QueryPermission; + + @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/user.entity.ts b/server/src/entities/user.entity.ts index e052e11245..515b1f469e 100644 --- a/server/src/entities/user.entity.ts +++ b/server/src/entities/user.entity.ts @@ -30,6 +30,7 @@ import { AiConversation } from './ai_conversation.entity'; 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'; @Entity({ name: 'users' }) export class User extends BaseEntity { @@ -188,6 +189,9 @@ export class User extends BaseEntity { @OneToMany(() => PageUser, (pageUser) => pageUser.user) pageUsers: PageUser[]; + @OneToMany(() => QueryUser, (queryUser) => queryUser.user) + queryUsers: QueryUser[]; + organizationId: string; invitedOrganizationId: string; organizationIds?: Array;