diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index c744845b72b..d8b7a2fb76e 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -5,12 +5,13 @@ class TagsController < ::ApplicationController include TopicQueryParams before_action :ensure_tags_enabled - before_action :ensure_visible, only: %i[show info] def self.show_methods Discourse.anonymous_filters.map { |f| :"show_#{f}" } end + before_action :ensure_visible, only: [:show, :info, *show_methods] + requires_login except: [:index, :show, :tag_feed, :search, :info, *show_methods] skip_before_action :check_xhr, only: [:tag_feed, :show, :index, *show_methods] diff --git a/spec/requests/tags_controller_spec.rb b/spec/requests/tags_controller_spec.rb index f4fdff30a6e..b7dc5bfe4a4 100644 --- a/spec/requests/tags_controller_spec.rb +++ b/spec/requests/tags_controller_spec.rb @@ -634,6 +634,18 @@ RSpec.describe TagsController do expect(response.status).to eq(200) end + it "returns a 404 when tag is restricted" do + tag_group = Fabricate(:tag_group, permissions: { "staff" => 1 }, tag_names: ["test"]) + + get "/tag/test/l/latest.json" + expect(response.status).to eq(404) + + sign_in(admin) + + get "/tag/test/l/latest.json" + expect(response.status).to eq(200) + end + context "with muted tags" do before do TagUser.create!( @@ -713,6 +725,18 @@ RSpec.describe TagsController do get "/tag/#{tag.name}/l/top.json?period=decadely" expect(response.status).to eq(400) end + + it "returns a 404 if tag is restricted" do + tag_group = Fabricate(:tag_group, permissions: { "staff" => 1 }, tag_names: ["test"]) + + get "/tag/test/l/top.json" + expect(response.status).to eq(404) + + sign_in(admin) + + get "/tag/test/l/top.json" + expect(response.status).to eq(200) + end end describe "#search" do