UNPKG

@xrengine/server-core

Version:

Shared components for XREngine server

53 lines (49 loc) 1.84 kB
import { BadRequest, Forbidden } from '@feathersjs/errors' import { HookContext } from '@feathersjs/feathers' import { UserInterface } from '@xrengine/common/src/interfaces/User' // This will attach the owner ID in the contact while creating/updating list item export default () => { return async (context: HookContext): Promise<HookContext> => { let fetchedGroupId const { id, method, params, app, path } = context const loggedInUser = params.user as UserInterface if (path === 'group-user' && method === 'remove') { const groupUser = await app.service('group-user').get(id!, null!) fetchedGroupId = groupUser.groupId } const groupId = path === 'group-user' && method === 'find' ? params.query!.groupId : fetchedGroupId != null ? fetchedGroupId : id params.query!.groupId = groupId const userId = path === 'group' ? loggedInUser.id : params.query!.userId || loggedInUser.id const groupUserCountResult = await app.service('group-user').find({ query: { groupId: groupId, $limit: 0 } }) if (groupUserCountResult.total > 0) { const groupUserResult = await app.service('group-user').find({ query: { groupId: groupId, userId: userId } }) if (groupUserResult.total === 0) { throw new BadRequest('Invalid group ID') } const groupUser = groupUserResult.data[0] if ( params.groupUsersRemoved !== true && groupUser.groupUserRank !== 'owner' && groupUser.groupUserRank !== 'admin' && groupUser.userId !== loggedInUser.id ) { throw new Forbidden('You must be the owner or an admin of this group to perform that action') } } if (path === 'group') { delete params.query!.groupId } return context } }