mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 09:26:54 -06:00
improve logic and performance on front page to avoid massive query
This commit is contained in:
parent
279c3a3add
commit
36f8c9c45b
@ -404,6 +404,12 @@ class Guardian
|
||||
@secure_category_ids ||= @user.secure_category_ids
|
||||
end
|
||||
|
||||
# all allowed category ids
|
||||
def allowed_category_ids
|
||||
unrestricted = Category.where(read_restricted: false).pluck(:id)
|
||||
unrestricted.concat(secure_category_ids)
|
||||
end
|
||||
|
||||
def topic_create_allowed_category_ids
|
||||
@topic_create_allowed_category_ids ||= @user.topic_create_allowed_category_ids
|
||||
end
|
||||
|
@ -255,12 +255,13 @@ class TopicQuery
|
||||
result = result.where('topics.id in (?)', options[:topic_ids]).references(:topics)
|
||||
end
|
||||
|
||||
unless @user && @user.moderator?
|
||||
category_ids = @user.secure_category_ids if @user
|
||||
if category_ids.present?
|
||||
result = result.where('categories.read_restricted IS NULL OR categories.read_restricted = ? OR categories.id IN (?)', false, category_ids).references(:categories)
|
||||
guardian = Guardian.new(@user)
|
||||
unless guardian.is_staff?
|
||||
allowed_ids = guardian.allowed_category_ids
|
||||
if allowed_ids.length > 0
|
||||
result = result.where('topics.category_id IS NULL or topics.category_id IN (?)', allowed_ids)
|
||||
else
|
||||
result = result.where('categories.read_restricted IS NULL OR categories.read_restricted = ?', false).references(:categories)
|
||||
result = result.where('topics.category_id IS NULL')
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user