From fc3669af741b62f1f56a6a3b0294e501cedec733 Mon Sep 17 00:00:00 2001 From: devanshu052000 Date: Thu, 17 Apr 2025 03:38:31 +0530 Subject: [PATCH] Added API to get user groups for an app with view access --- server/src/modules/app-permissions/ability/index.ts | 2 ++ .../src/modules/app-permissions/constants/features.ts | 1 + server/src/modules/app-permissions/constants/index.ts | 1 + server/src/modules/app-permissions/controller.ts | 10 ++++++++++ .../modules/app-permissions/interfaces/IController.ts | 2 ++ .../src/modules/app-permissions/interfaces/IService.ts | 2 ++ .../modules/app-permissions/interfaces/IUtilService.ts | 3 +++ server/src/modules/app-permissions/module.ts | 3 ++- server/src/modules/app-permissions/service.ts | 4 ++++ server/src/modules/app-permissions/types/index.ts | 1 + server/src/modules/app-permissions/util.service.ts | 5 +++++ 11 files changed, 33 insertions(+), 1 deletion(-) diff --git a/server/src/modules/app-permissions/ability/index.ts b/server/src/modules/app-permissions/ability/index.ts index c473903711..e9f5a0a270 100644 --- a/server/src/modules/app-permissions/ability/index.ts +++ b/server/src/modules/app-permissions/ability/index.ts @@ -30,6 +30,7 @@ export class FeatureAbilityFactory extends AbilityFactory if (isAdmin || superAdmin) { // Admin or super admin and do all operations can([FEATURE_KEY.FETCH_USERS], App); + can([FEATURE_KEY.FETCH_USER_GROUPS], App); return; } @@ -38,6 +39,7 @@ export class FeatureAbilityFactory extends AbilityFactory (userAppPermissions?.editableAppsId?.length && appId && userAppPermissions.editableAppsId.includes(appId)) ) { can([FEATURE_KEY.FETCH_USERS], App); + can([FEATURE_KEY.FETCH_USER_GROUPS], App); } } } diff --git a/server/src/modules/app-permissions/constants/features.ts b/server/src/modules/app-permissions/constants/features.ts index 8f53ed8a49..a6ec529c26 100644 --- a/server/src/modules/app-permissions/constants/features.ts +++ b/server/src/modules/app-permissions/constants/features.ts @@ -5,5 +5,6 @@ import { FeaturesConfig } from '../types'; export const FEATURES: FeaturesConfig = { [MODULES.APP_PERMISSIONS]: { [FEATURE_KEY.FETCH_USERS]: {}, + [FEATURE_KEY.FETCH_USER_GROUPS]: {}, }, }; diff --git a/server/src/modules/app-permissions/constants/index.ts b/server/src/modules/app-permissions/constants/index.ts index 67397f38a4..dc0862e88c 100644 --- a/server/src/modules/app-permissions/constants/index.ts +++ b/server/src/modules/app-permissions/constants/index.ts @@ -1,3 +1,4 @@ export enum FEATURE_KEY { FETCH_USERS = 'fetch_users', + FETCH_USER_GROUPS = 'fetch_user_groups', } diff --git a/server/src/modules/app-permissions/controller.ts b/server/src/modules/app-permissions/controller.ts index f0a402cad3..3a301cf732 100644 --- a/server/src/modules/app-permissions/controller.ts +++ b/server/src/modules/app-permissions/controller.ts @@ -24,4 +24,14 @@ export class AppPermissionsController implements IAppPermissionsController { ): Promise { throw new NotFoundException(); } + + @InitFeature(FEATURE_KEY.FETCH_USER_GROUPS) + @Get(':appId/pages/user-groups') + async fetchUserGroups( + @User() user, + @Param('appId') appId: string, + @Res({ passthrough: true }) response: Response + ): Promise { + throw new NotFoundException(); + } } diff --git a/server/src/modules/app-permissions/interfaces/IController.ts b/server/src/modules/app-permissions/interfaces/IController.ts index e758fcf1ab..615873e1ed 100644 --- a/server/src/modules/app-permissions/interfaces/IController.ts +++ b/server/src/modules/app-permissions/interfaces/IController.ts @@ -3,4 +3,6 @@ import { Response } from 'express'; export interface IAppPermissionsController { fetchUsers(user: User, appId: string, response: Response): Promise; + + fetchUserGroups(user: User, appId: string, response: Response): Promise; } diff --git a/server/src/modules/app-permissions/interfaces/IService.ts b/server/src/modules/app-permissions/interfaces/IService.ts index 750b33ea9f..8d6ee9eee5 100644 --- a/server/src/modules/app-permissions/interfaces/IService.ts +++ b/server/src/modules/app-permissions/interfaces/IService.ts @@ -2,4 +2,6 @@ import { User } from '@entities/user.entity'; export interface IAppPermissionsService { fetchUsers(appId: string, user: User): Promise; + + fetchUserGroups(appId: string, user: User): Promise; } diff --git a/server/src/modules/app-permissions/interfaces/IUtilService.ts b/server/src/modules/app-permissions/interfaces/IUtilService.ts index 12cacfe06e..b453efd251 100644 --- a/server/src/modules/app-permissions/interfaces/IUtilService.ts +++ b/server/src/modules/app-permissions/interfaces/IUtilService.ts @@ -1,5 +1,8 @@ import { User } from '@entities/user.entity'; +import { GroupPermissions } from '@entities/group_permissions.entity'; export interface IUtilService { getUsersWithViewAccess(appId: string, organizationId: string, endUserIds: string[]): Promise; + + getUserGroupsWithViewAccess(appId: string, organizationId: string): Promise; } diff --git a/server/src/modules/app-permissions/module.ts b/server/src/modules/app-permissions/module.ts index aadb998dc6..b0cca61062 100644 --- a/server/src/modules/app-permissions/module.ts +++ b/server/src/modules/app-permissions/module.ts @@ -2,6 +2,7 @@ import { getImportPath } from '@modules/app/constants'; import { DynamicModule } from '@nestjs/common'; import { FeatureAbilityFactory } from './ability'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { GroupPermissions } from '@entities/group_permissions.entity'; import { User } from '@entities/user.entity'; import { RolesRepository } from '@modules/roles/repository'; @@ -14,7 +15,7 @@ export class AppPermissionsModule { return { module: AppPermissionsModule, - imports: [TypeOrmModule.forFeature([User])], + imports: [TypeOrmModule.forFeature([GroupPermissions, User])], controllers: [AppPermissionsController], providers: [AppPermissionsService, AppPermissionsUtilService, RolesRepository, FeatureAbilityFactory], exports: [AppPermissionsUtilService], diff --git a/server/src/modules/app-permissions/service.ts b/server/src/modules/app-permissions/service.ts index db7a61d98b..e97a39fb84 100644 --- a/server/src/modules/app-permissions/service.ts +++ b/server/src/modules/app-permissions/service.ts @@ -8,4 +8,8 @@ export class AppPermissionsService implements IAppPermissionsService { async fetchUsers(appId, user) { throw new Error('Method not implemented.'); } + + async fetchUserGroups(appId, user) { + throw new Error('Method not implemented.'); + } } diff --git a/server/src/modules/app-permissions/types/index.ts b/server/src/modules/app-permissions/types/index.ts index d1f1760948..ecced6b47c 100644 --- a/server/src/modules/app-permissions/types/index.ts +++ b/server/src/modules/app-permissions/types/index.ts @@ -4,6 +4,7 @@ import { MODULES } from '@modules/app/constants/modules'; interface Features { [FEATURE_KEY.FETCH_USERS]: FeatureConfig; + [FEATURE_KEY.FETCH_USER_GROUPS]: FeatureConfig; } export interface FeaturesConfig { diff --git a/server/src/modules/app-permissions/util.service.ts b/server/src/modules/app-permissions/util.service.ts index bb07699714..2705e60668 100644 --- a/server/src/modules/app-permissions/util.service.ts +++ b/server/src/modules/app-permissions/util.service.ts @@ -1,11 +1,16 @@ import { User } from '@entities/user.entity'; import { IUtilService } from './interfaces/IUtilService'; import { Injectable } from '@nestjs/common'; +import { GroupPermissions } from '@entities/group_permissions.entity'; @Injectable() export class AppPermissionsUtilService implements IUtilService { constructor() {} + async getUserGroupsWithViewAccess(appId: string, organizationId: string): Promise { + throw new Error('Method not implemented.'); + } + async getUsersWithViewAccess(appId: string, organizationId: string, endUserIds: string[]): Promise { throw new Error('Method not implemented.'); }