[FIX] Allowing blocking a user on channels (#17406)

pull/17454/head
Diego Sampaio 6 years ago
parent 646ccd92bb
commit c9c137e588
No known key found for this signature in database
GPG Key ID: E060152B30502562
  1. 9
      app/authorization/server/functions/canSendMessage.js
  2. 11
      app/lib/lib/roomTypes/private.js
  3. 11
      app/lib/lib/roomTypes/public.js

@ -1,6 +1,7 @@
import { canAccessRoomAsync } from './canAccessRoom';
import { hasPermissionAsync } from './hasPermission';
import { Subscriptions, Rooms } from '../../../models/server/raw';
import { roomTypes, RoomMemberActions } from '../../../utils/server';
const subscriptionOptions = {
projection: {
@ -16,9 +17,11 @@ export const canSendMessageAsync = async (rid, { uid, username, type }, extraDat
throw new Error('error-not-allowed');
}
const subscription = await Subscriptions.findOneByRoomIdAndUserId(rid, uid, subscriptionOptions);
if (subscription && (subscription.blocked || subscription.blocker)) {
throw new Error('room_is_blocked');
if (roomTypes.getConfig(room.t).allowMemberAction(room, RoomMemberActions.BLOCK)) {
const subscription = await Subscriptions.findOneByRoomIdAndUserId(rid, uid, subscriptionOptions);
if (subscription && (subscription.blocked || subscription.blocker)) {
throw new Error('room_is_blocked');
}
}
if (room.ro === true && !await hasPermissionAsync(uid, 'post-readonly', rid)) {

@ -4,7 +4,7 @@ import { ChatRoom, ChatSubscription } from '../../../models';
import { openRoom } from '../../../ui-utils';
import { settings } from '../../../settings';
import { hasAtLeastOnePermission, hasPermission } from '../../../authorization';
import { getUserPreference, RoomSettingsEnum, RoomTypeConfig, RoomTypeRouteConfig, UiTextContext, roomTypes } from '../../../utils';
import { getUserPreference, RoomSettingsEnum, RoomTypeConfig, RoomTypeRouteConfig, UiTextContext, roomTypes, RoomMemberActions } from '../../../utils';
import { getRoomAvatarURL } from '../../../utils/lib/getRoomAvatarURL';
import { getAvatarURL } from '../../../utils/lib/getAvatarURL';
@ -98,8 +98,13 @@ export class PrivateRoomType extends RoomTypeConfig {
}
}
allowMemberAction(/* room, action */) {
return true;
allowMemberAction(room, action) {
switch (action) {
case RoomMemberActions.BLOCK:
return false;
default:
return true;
}
}
enableMembersListProfile() {

@ -4,7 +4,7 @@ import { openRoom } from '../../../ui-utils';
import { ChatRoom, ChatSubscription } from '../../../models';
import { settings } from '../../../settings';
import { hasAtLeastOnePermission } from '../../../authorization';
import { getUserPreference, RoomTypeConfig, RoomTypeRouteConfig, RoomSettingsEnum, UiTextContext } from '../../../utils';
import { getUserPreference, RoomTypeConfig, RoomTypeRouteConfig, RoomSettingsEnum, UiTextContext, RoomMemberActions } from '../../../utils';
import { getAvatarURL } from '../../../utils/lib/getAvatarURL';
export class PublicRoomRoute extends RoomTypeRouteConfig {
@ -113,8 +113,13 @@ export class PublicRoomType extends RoomTypeConfig {
}
}
allowMemberAction(/* room, action */) {
return true;
allowMemberAction(room, action) {
switch (action) {
case RoomMemberActions.BLOCK:
return false;
default:
return true;
}
}
getUiText(context) {

Loading…
Cancel
Save