mirror of
				https://github.com/discourse/discourse.git
				synced 2025-02-25 18:55:32 -06:00 
			
		
		
		
	improve logic and performance on front page to avoid massive query
This commit is contained in:
		| @@ -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 | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user