mod actions: hide ip bans from non-mods.
Hide IP ban creation and deletion actions from non-mods in the /mod_actions listing. The previous approach of just filtering out the IP from the description was hacky and didn't work with the `only` param (/mod_actions.json?only=id still included the description field).
This commit is contained in:
@@ -54,31 +54,28 @@ class ModAction < ApplicationRecord
|
|||||||
other: 2000
|
other: 2000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def self.permitted(user)
|
||||||
|
if user.is_moderator?
|
||||||
|
all
|
||||||
|
else
|
||||||
|
where.not(category: [:ip_ban_create, :ip_ban_delete])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def self.search(params)
|
def self.search(params)
|
||||||
q = super
|
q = super
|
||||||
|
|
||||||
|
q = q.permitted(CurrentUser.user)
|
||||||
q = q.search_attributes(params, :creator, :category, :description)
|
q = q.search_attributes(params, :creator, :category, :description)
|
||||||
q = q.text_attribute_matches(:description, params[:description_matches])
|
q = q.text_attribute_matches(:description, params[:description_matches])
|
||||||
|
|
||||||
q.apply_default_order(params)
|
q.apply_default_order(params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def filtered_description
|
|
||||||
if (ip_ban_create? || ip_ban_delete?) && !CurrentUser.user.is_moderator?
|
|
||||||
description.gsub(/(created|deleted) ip ban for .*/, "\\1 ip ban")
|
|
||||||
else
|
|
||||||
description
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def category_id
|
def category_id
|
||||||
self.class.categories[category]
|
self.class.categories[category]
|
||||||
end
|
end
|
||||||
|
|
||||||
def serializable_hash(*args)
|
|
||||||
super(*args).merge("description" => filtered_description)
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.log(desc, cat = :other)
|
def self.log(desc, cat = :other)
|
||||||
create(:description => desc,:category => categories[cat])
|
create(:description => desc,:category => categories[cat])
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="col-expand">
|
<td class="col-expand">
|
||||||
<div class="prose">
|
<div class="prose">
|
||||||
<%= format_text(mod_action.filtered_description) %>
|
<%= format_text(mod_action.description) %>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
@@ -3,17 +3,15 @@ require 'test_helper'
|
|||||||
class ModActionTest < ActiveSupport::TestCase
|
class ModActionTest < ActiveSupport::TestCase
|
||||||
context "A mod action" do
|
context "A mod action" do
|
||||||
setup do
|
setup do
|
||||||
@user = FactoryBot.create(:user)
|
@user = create(:user)
|
||||||
CurrentUser.user = @user
|
@mod = create(:moderator_user)
|
||||||
CurrentUser.ip_addr = "127.0.0.1"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
should "hide ip addresses from non-moderators in ip ban modactions" do
|
should "hide ip addresses from non-moderators in ip ban modactions" do
|
||||||
FactoryBot.create(:ip_ban, ip_addr: "1.1.1.1", reason: "test")
|
as(@mod) { create(:ip_ban, ip_addr: "1.1.1.1", reason: "test") }
|
||||||
|
|
||||||
assert_equal(1, ModAction.count)
|
as(@user) { assert_equal(0, ModAction.search({}).count) }
|
||||||
assert_equal("#{@user.name} created ip ban", ModAction.last.filtered_description)
|
as(@mod) { assert_equal(1, ModAction.search({}).count) }
|
||||||
assert_equal("#{@user.name} created ip ban", ModAction.last.as_json["description"])
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user