mirror of
https://github.com/discourse/discourse.git
synced 2025-06-03 19:39:30 +08:00
FIX: an existing member of a channel is allowed to join (#26884)
There's no point checking if a user can join a channel if they are already part of it. This case was frequent when using `enforce_membership: true` for custom bots for example.
This commit is contained in:
@ -92,7 +92,7 @@ module Chat
|
|||||||
end
|
end
|
||||||
|
|
||||||
def allowed_to_join_channel(guardian:, channel:)
|
def allowed_to_join_channel(guardian:, channel:)
|
||||||
guardian.can_join_chat_channel?(channel)
|
channel.membership_for(guardian.user) || guardian.can_join_chat_channel?(channel)
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch_channel_membership(guardian:, channel:)
|
def fetch_channel_membership(guardian:, channel:)
|
||||||
|
@ -394,7 +394,9 @@ RSpec.describe Chat::Api::ChannelMessagesController do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "errors when the user is not part of the direct message channel" do
|
it "errors when the user is not part of the direct message channel" do
|
||||||
|
Chat::UserChatChannelMembership.where(user_id: user1.id).destroy_all
|
||||||
Chat::DirectMessageUser.find_by(user: user1, direct_message: chatable).destroy!
|
Chat::DirectMessageUser.find_by(user: user1, direct_message: chatable).destroy!
|
||||||
|
|
||||||
sign_in(user1)
|
sign_in(user1)
|
||||||
post "/chat/#{direct_message_channel.id}.json", params: { message: message }
|
post "/chat/#{direct_message_channel.id}.json", params: { message: message }
|
||||||
expect(response.status).to eq(403)
|
expect(response.status).to eq(403)
|
||||||
|
@ -227,9 +227,15 @@ RSpec.describe Chat::CreateMessage do
|
|||||||
|
|
||||||
context "when channel model is found" do
|
context "when channel model is found" do
|
||||||
context "when user can't join channel" do
|
context "when user can't join channel" do
|
||||||
let(:guardian) { Guardian.new }
|
let(:guardian) { other_user.guardian }
|
||||||
|
|
||||||
it { is_expected.to fail_a_policy(:allowed_to_join_channel) }
|
it { is_expected.to fail_a_policy(:allowed_to_join_channel) }
|
||||||
|
|
||||||
|
context "when the user is already member of the channel" do
|
||||||
|
before { channel.add(guardian.user) }
|
||||||
|
|
||||||
|
it { is_expected.to be_a_success }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when user is system" do
|
context "when user is system" do
|
||||||
|
Reference in New Issue
Block a user