Created base for API endpoint, feature keys and DTO

This commit is contained in:
devanshu052000 2025-05-21 13:17:36 +05:30
parent fbb30fcff9
commit b13a8ca376
7 changed files with 120 additions and 3 deletions

View file

@ -38,6 +38,10 @@ export class FeatureAbilityFactory extends AbilityFactory<FEATURE_KEY, Subjects>
FEATURE_KEY.CREATE_PAGE_PERMISSIONS,
FEATURE_KEY.UPDATE_PAGE_PERMISSIONS,
FEATURE_KEY.DELETE_PAGE_PERMISSIONS,
FEATURE_KEY.FETCH_QUERY_PERMISSIONS,
FEATURE_KEY.CREATE_QUERY_PERMISSIONS,
FEATURE_KEY.UPDATE_QUERY_PERMISSIONS,
FEATURE_KEY.DELETE_QUERY_PERMISSIONS,
],
App
);
@ -56,6 +60,10 @@ export class FeatureAbilityFactory extends AbilityFactory<FEATURE_KEY, Subjects>
FEATURE_KEY.CREATE_PAGE_PERMISSIONS,
FEATURE_KEY.UPDATE_PAGE_PERMISSIONS,
FEATURE_KEY.DELETE_PAGE_PERMISSIONS,
FEATURE_KEY.FETCH_QUERY_PERMISSIONS,
FEATURE_KEY.CREATE_QUERY_PERMISSIONS,
FEATURE_KEY.UPDATE_QUERY_PERMISSIONS,
FEATURE_KEY.DELETE_QUERY_PERMISSIONS,
],
App
);
@ -66,7 +74,15 @@ export class FeatureAbilityFactory extends AbilityFactory<FEATURE_KEY, Subjects>
isAllAppsViewable ||
(userAppPermissions?.viewableAppsId?.length && appId && userAppPermissions.viewableAppsId.includes(appId))
) {
can([FEATURE_KEY.FETCH_USERS, FEATURE_KEY.FETCH_USER_GROUPS, FEATURE_KEY.FETCH_PAGE_PERMISSIONS], App);
can(
[
FEATURE_KEY.FETCH_USERS,
FEATURE_KEY.FETCH_USER_GROUPS,
FEATURE_KEY.FETCH_PAGE_PERMISSIONS,
FEATURE_KEY.FETCH_QUERY_PERMISSIONS,
],
App
);
}
}
}

View file

@ -10,5 +10,9 @@ export const FEATURES: FeaturesConfig = {
[FEATURE_KEY.CREATE_PAGE_PERMISSIONS]: {},
[FEATURE_KEY.UPDATE_PAGE_PERMISSIONS]: {},
[FEATURE_KEY.DELETE_PAGE_PERMISSIONS]: {},
[FEATURE_KEY.FETCH_QUERY_PERMISSIONS]: {},
[FEATURE_KEY.CREATE_QUERY_PERMISSIONS]: {},
[FEATURE_KEY.UPDATE_QUERY_PERMISSIONS]: {},
[FEATURE_KEY.DELETE_QUERY_PERMISSIONS]: {},
},
};

View file

@ -11,4 +11,8 @@ export enum FEATURE_KEY {
CREATE_PAGE_PERMISSIONS = 'create_page_permissions',
UPDATE_PAGE_PERMISSIONS = 'update_page_permissions',
DELETE_PAGE_PERMISSIONS = 'delete_page_permissions',
FETCH_QUERY_PERMISSIONS = 'fetch_query_permissions',
CREATE_QUERY_PERMISSIONS = 'create_query_permissions',
UPDATE_QUERY_PERMISSIONS = 'update_query_permissions',
DELETE_QUERY_PERMISSIONS = 'delete_query_permissions',
}

View file

@ -8,7 +8,7 @@ import { MODULES } from '@modules/app/constants/modules';
import { InitFeature } from '@modules/app/decorators/init-feature.decorator';
import { FEATURE_KEY } from './constants';
import { JwtAuthGuard } from '@modules/session/guards/jwt-auth.guard';
import { CreatePagePermissionDto } from './dto';
import { CreatePagePermissionDto, CreateQueryPermissionDto } from './dto';
@InitModule(MODULES.APP_PERMISSIONS)
@UseGuards(JwtAuthGuard, FeatureAbilityGuard)
@ -81,4 +81,50 @@ export class AppPermissionsController implements IAppPermissionsController {
): Promise<any> {
throw new NotFoundException();
}
@InitFeature(FEATURE_KEY.FETCH_QUERY_PERMISSIONS)
@Get(':appId/queries/:queryId')
async fetchQueryPermissions(
@User() user,
@Param('appId') appId: string,
@Param('queryId') queryId: string,
@Res({ passthrough: true }) response: Response
): Promise<any> {
throw new NotFoundException();
}
@InitFeature(FEATURE_KEY.CREATE_QUERY_PERMISSIONS)
@Post(':appId/queries/:queryId')
async createQueryPermissions(
@User() user,
@Param('appId') appId: string,
@Param('queryId') queryId: string,
@Body() body: CreateQueryPermissionDto,
@Res({ passthrough: true }) response: Response
): Promise<any> {
throw new NotFoundException();
}
@InitFeature(FEATURE_KEY.UPDATE_QUERY_PERMISSIONS)
@Put(':appId/queries/:queryId')
async updateQueryPermissions(
@User() user,
@Param('appId') appId: string,
@Param('queryId') queryId: string,
@Body() body: CreateQueryPermissionDto,
@Res({ passthrough: true }) response: Response
): Promise<any> {
throw new NotFoundException();
}
@InitFeature(FEATURE_KEY.DELETE_QUERY_PERMISSIONS)
@Delete(':appId/queries/:queryId')
async deleteQueryPermissions(
@User() user,
@Param('appId') appId: string,
@Param('queryId') queryId: string,
@Res({ passthrough: true }) response: Response
): Promise<any> {
throw new NotFoundException();
}
}

View file

@ -24,3 +24,26 @@ export class CreatePagePermissionDto {
@Type(() => String)
groups?: string[];
}
export class CreateQueryPermissionDto {
@IsUUID(4)
@IsOptional()
queryId: string;
@IsEnum(PAGE_PERMISSION_TYPE)
type: PAGE_PERMISSION_TYPE;
@ValidateIf((o) => o.type === PAGE_PERMISSION_TYPE.SINGLE)
@IsArray()
@IsString({ each: true })
@IsOptional()
@Type(() => String)
users?: string[];
@ValidateIf((o) => o.type === PAGE_PERMISSION_TYPE.GROUP)
@IsArray()
@IsString({ each: true })
@IsOptional()
@Type(() => String)
groups?: string[];
}

View file

@ -1,6 +1,6 @@
import { User } from '@entities/user.entity';
import { Response } from 'express';
import { CreatePagePermissionDto } from '../dto';
import { CreatePagePermissionDto, CreateQueryPermissionDto } from '../dto';
export interface IAppPermissionsController {
fetchUsers(user: User, appId: string, response: Response): Promise<any>;
@ -26,4 +26,24 @@ export interface IAppPermissionsController {
): Promise<any>;
deletePagePermissions(user: User, appId: string, pageId: string, response: Response): Promise<any>;
fetchQueryPermissions(user: User, appId: string, queryId: string, response: Response): Promise<any>;
createQueryPermissions(
user: User,
appId: string,
queryId: string,
body: CreateQueryPermissionDto,
response: Response
): Promise<any>;
updateQueryPermissions(
user: User,
appId: string,
queryId: string,
body: CreateQueryPermissionDto,
response: Response
): Promise<any>;
deleteQueryPermissions(user: User, appId: string, queryId: string, response: Response): Promise<any>;
}

View file

@ -9,6 +9,10 @@ interface Features {
[FEATURE_KEY.CREATE_PAGE_PERMISSIONS]: FeatureConfig;
[FEATURE_KEY.UPDATE_PAGE_PERMISSIONS]: FeatureConfig;
[FEATURE_KEY.DELETE_PAGE_PERMISSIONS]: FeatureConfig;
[FEATURE_KEY.FETCH_QUERY_PERMISSIONS]: FeatureConfig;
[FEATURE_KEY.CREATE_QUERY_PERMISSIONS]: FeatureConfig;
[FEATURE_KEY.UPDATE_QUERY_PERMISSIONS]: FeatureConfig;
[FEATURE_KEY.DELETE_QUERY_PERMISSIONS]: FeatureConfig;
}
export interface FeaturesConfig {