@@ -9,7 +9,7 @@ import type {
99} from '@rocket.chat/core-typings' ;
1010import { Logger } from '@rocket.chat/logger' ;
1111import { callServer , type IMediaCallServerSettings } from '@rocket.chat/media-calls' ;
12- import { isClientMediaSignal , type ClientMediaSignal , type ServerMediaSignal } from '@rocket.chat/media-signaling' ;
12+ import { type CallFeature , isClientMediaSignal , type ClientMediaSignal , type ServerMediaSignal } from '@rocket.chat/media-signaling' ;
1313import type { InsertionModel } from '@rocket.chat/model-typings' ;
1414import { CallHistory , MediaCalls , Rooms , Users } from '@rocket.chat/models' ;
1515import { getHistoryMessagePayload } from '@rocket.chat/ui-voip/dist/ui-kit/getHistoryMessagePayload' ;
@@ -315,9 +315,22 @@ export class MediaCallService extends ServiceClassInternal implements IMediaCall
315315 } ,
316316 } ,
317317 permissionCheck : ( uid , callType ) => this . userHasMediaCallPermission ( uid , callType ) ,
318+ isFeatureAvailableForUser : ( uid , feature ) => this . userHasFeaturePermission ( uid , feature ) ,
318319 } ;
319320 }
320321
322+ private userHasFeaturePermission ( _uid : IUser [ '_id' ] , feature : CallFeature ) : boolean {
323+ if ( feature === 'audio' ) {
324+ return true ;
325+ }
326+
327+ if ( feature === 'screen-share' ) {
328+ return settings . get < boolean > ( 'VoIP_TeamCollab_Screen_Sharing_Enabled' ) ?? false ;
329+ }
330+
331+ return true ;
332+ }
333+
321334 private async userHasMediaCallPermission ( uid : IUser [ '_id' ] , callType : 'internal' | 'external' | 'any' ) : Promise < boolean > {
322335 if ( callType === 'any' ) {
323336 return Authorization . hasAtLeastOnePermission ( uid , [ 'allow-internal-voice-calls' , 'allow-external-voice-calls' ] ) ;
0 commit comments