backend: Implement room roles and permissions endpoints

This commit is contained in:
juancarmore 2025-04-12 13:46:00 +02:00
parent cc2dc83401
commit 743d3d514d
3 changed files with 39 additions and 26 deletions

View File

@ -2,8 +2,8 @@ import { container } from '../config/dependency-injector.config.js';
import { Request, Response } from 'express';
import { LoggerService } from '../services/logger.service.js';
import { OpenViduMeetError } from '../models/error.model.js';
import { RoomService } from '../services/room.service.js';
import { MeetRoomFilters, MeetRoomOptions } from '@typings-ce';
import { RoomService, ParticipantService } from '../services/index.js';
import { MeetRoomFilters, MeetRoomOptions, MeetRoomRoleAndPermissions, ParticipantRole } from '@typings-ce';
export const createRoom = async (req: Request, res: Response) => {
const logger = container.get(LoggerService);
@ -111,20 +111,47 @@ export const bulkDeleteRooms = async (req: Request, res: Response) => {
}
};
export const getParticipantRole = async (req: Request, res: Response) => {
export const getRoomRolesAndPermissions = async (req: Request, res: Response) => {
const logger = container.get(LoggerService);
const participantService = container.get(ParticipantService);
const { roomId } = req.params;
logger.verbose(`Getting roles and associated permissions for room '${roomId}'`);
const moderatorPermissions = participantService.getParticipantPermissions(ParticipantRole.MODERATOR, roomId);
const publisherPermissions = participantService.getParticipantPermissions(ParticipantRole.PUBLISHER, roomId);
const rolesAndPermissions = [
{
role: ParticipantRole.MODERATOR,
permissions: moderatorPermissions
},
{
role: ParticipantRole.PUBLISHER,
permissions: publisherPermissions
}
];
res.status(200).json(rolesAndPermissions);
};
export const getRoomRoleAndPermissions = async (req: Request, res: Response) => {
const logger = container.get(LoggerService);
const roomService = container.get(RoomService);
const participantService = container.get(ParticipantService);
const { roomId } = req.params;
const { secret } = req.query as { secret: string };
const { roomId, secret } = req.params;
try {
logger.verbose(`Getting participant role for room '${roomId}'`);
logger.verbose(`Getting room role and associated permissions for room '${roomId}' and secret '${secret}'`);
const role = await roomService.getRoomSecretRole(roomId, secret);
return res.status(200).json(role);
const role = await roomService.getRoomRoleBySecret(roomId, secret);
const permissions = participantService.getParticipantPermissions(role, roomId);
const roleAndPermissions: MeetRoomRoleAndPermissions = {
role,
permissions
};
return res.status(200).json(roleAndPermissions);
} catch (error) {
logger.error(`Error getting participant role for room '${roomId}'`);
logger.error(`Error getting room role and permissions for room '${roomId}' and secret '${secret}'`);
handleError(res, error);
}
};

View File

@ -98,10 +98,6 @@ const RoomRequestOptionsSchema: z.ZodType<MeetRoomOptions> = z.object({
// .default(null)
});
const GetParticipantRoleSchema = z.object({
secret: z.string()
});
const GetRoomFiltersSchema: z.ZodType<MeetRoomFilters> = z.object({
maxItems: z.coerce
.number()
@ -215,17 +211,6 @@ export const withValidRoomDeleteRequest = (req: Request, res: Response, next: Ne
next();
};
export const validateGetParticipantRoleRequest = (req: Request, res: Response, next: NextFunction) => {
const { success, error, data } = GetParticipantRoleSchema.safeParse(req.query);
if (!success) {
return rejectRequest(res, error);
}
req.query = data;
next();
};
const rejectRequest = (res: Response, error: z.ZodError) => {
const errors = error.errors.map((error) => ({
field: error.path.join('.'),

View File

@ -6,7 +6,6 @@ import {
tokenAndRoleValidator,
apiKeyValidator,
participantTokenValidator,
validateGetParticipantRoleRequest,
withValidRoomFiltersRequest,
withValidRoomOptions,
configureCreateRoomAuth,
@ -63,4 +62,6 @@ internalRoomRouter.put(
roomCtrl.updateRoomPreferences
);
internalRoomRouter.get('/:roomId/participant-role', validateGetParticipantRoleRequest, roomCtrl.getParticipantRole);
// Roles and permissions
internalRoomRouter.get('/:roomId/roles', roomCtrl.getRoomRolesAndPermissions);
internalRoomRouter.get('/:roomId/roles/:secret', roomCtrl.getRoomRoleAndPermissions);