1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-01-31 19:47:14 +00:00

Ensure that a UserQuery can only be viewed or edited by admins (#42352).

Patch by Holger Just (user:hjust).

git-svn-id: https://svn.redmine.org/redmine/trunk@23530 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Marius Balteanu 2025-03-09 23:22:46 +00:00
parent 10971361fa
commit 3c5f0af44d
2 changed files with 41 additions and 0 deletions

View File

@ -34,6 +34,15 @@ class UserQuery < Query
QueryAssociationColumn.new(:auth_source, :name, caption: :field_auth_source, sortable: "#{AuthSource.table_name}.name")
]
def self.visible(*args)
user = args.shift || User.current
if user.admin?
where('1=1')
else
where('1=0')
end
end
def initialize(attributes=nil, *args)
super(attributes)
self.filters ||= { 'status' => {operator: "=", values: [User::STATUS_ACTIVE]} }
@ -65,6 +74,14 @@ class UserQuery < Query
add_custom_fields_filters(user_custom_fields)
end
def visible?(user=User.current)
user&.admin?
end
def editable_by?(user)
user&.admin?
end
def auth_sources_values
AuthSource.order(name: :asc).pluck(:name, :id)
end

View File

@ -209,6 +209,30 @@ class UserQueryTest < ActiveSupport::TestCase
assert_equal [2, 1], users.pluck(:id)
end
def test_user_query_is_only_visible_to_admins
q = UserQuery.new(name: '_')
assert q.save
admin = User.admin(true).first
user = User.admin(false).first
assert q.visible?(admin)
assert_include q, UserQuery.visible(admin).to_a
assert_not q.visible?(user)
assert_not_include q, UserQuery.visible(user)
end
def test_user_query_is_only_editable_by_admins
q = UserQuery.new(name: '_')
admin = User.admin(true).first
user = User.admin(false).first
assert q.editable_by?(admin)
assert_not q.editable_by?(user)
end
def find_users_with_query(query)
User.where(query.statement).to_a
end