diff --git a/app/controllers/maps_controller.rb b/app/controllers/maps_controller.rb index 7044d424..cddd4ac3 100644 --- a/app/controllers/maps_controller.rb +++ b/app/controllers/maps_controller.rb @@ -83,7 +83,7 @@ class MapsController < ApplicationController # GET maps/:id/contains def contains respond_to do |format| - format.json { render json: @map.contains(current_user) } + format.json { render json: @map.contains(current_user).to_json(user: current_user) } end end diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index 7ce71f70..2400163a 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -11,11 +11,11 @@ class TopicsController < ApplicationController def autocomplete_topic term = params[:term] if term && !term.empty? - @topics = policy_scope(Topic.where('LOWER("name") like ?', term.downcase + '%')).order('"name"') + @topics = policy_scope(Topic).where('LOWER("name") like ?', term.downcase + '%').order('"name"') @mapTopics = @topics.select { |t| t.metacode.name == 'Metamap' } # prioritize topics which point to maps, over maps @exclude = @mapTopics.length > 0 ? @mapTopics.map(&:name) : [''] - @maps = policy_scope(Map.where('LOWER("name") like ? AND name NOT IN (?)', term.downcase + '%', @exclude)).order('"name"') + @maps = policy_scope(Map).where('LOWER("name") like ? AND name NOT IN (?)', term.downcase + '%', @exclude).order('"name"') else @topics = [] @maps = [] @@ -39,7 +39,7 @@ class TopicsController < ApplicationController respond_with(@allsynapses, @alltopics, @allcreators, @topic) end - format.json { render json: @topic } + format.json { render json: @topic.to_json(user: current_user) } end end @@ -55,9 +55,9 @@ class TopicsController < ApplicationController @allcreators += @allsynapses.map(&:user).uniq @json = {} - @json['topic'] = @topic + @json['topic'] = @topic.to_json(user: current_user) @json['creators'] = @allcreators - @json['relatives'] = @alltopics + @json['relatives'] = @alltopics.to_json(user: current_user) @json['synapses'] = @allsynapses respond_to do |format| @@ -114,7 +114,7 @@ class TopicsController < ApplicationController end @json = {} - @json['topics'] = alltopics + @json['topics'] = alltopics.to_json(user: current_user) @json['synapses'] = allsynapses @json['creators'] = allcreators @@ -131,7 +131,7 @@ class TopicsController < ApplicationController respond_to do |format| if @topic.save - format.json { render json: @topic, status: :created } + format.json { render json: @topic.to_json(user: current_user), status: :created } else format.json { render json: @topic.errors, status: :unprocessable_entity } end diff --git a/app/helpers/topics_helper.rb b/app/helpers/topics_helper.rb index fa16c358..58f53a6e 100644 --- a/app/helpers/topics_helper.rb +++ b/app/helpers/topics_helper.rb @@ -15,8 +15,8 @@ module TopicsHelper permission: t.permission, rtype: is_map ? 'map' : 'topic', - inmaps: is_map ? [] : t.inmaps, - inmapsLinks: is_map ? [] : t.inmapsLinks, + inmaps: is_map ? [] : t.inmaps(current_user), + inmapsLinks: is_map ? [] : t.inmapsLinks(current_user), type: is_map ? metamapMetacode.name : t.metacode.name, typeImageURL: is_map ? metamapMetacode.icon : t.metacode.icon, mapCount: is_map ? 0 : t.maps.count, diff --git a/app/models/topic.rb b/app/models/topic.rb index c3028cc4..16016621 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -59,28 +59,31 @@ class Topic < ApplicationRecord user.image.url end - def map_count - maps.count + def map_count(user) + Pundit.policy_scope(user, maps).count end - def synapse_count - synapses.count + def synapse_count(user) + Pundit.policy_scope(user, synapses).count end - def inmaps - maps.map(&:name) + def inmaps(user) + Pundit.policy_scope(user, maps).map(&:name) end - def inmapsLinks - maps.map(&:id) + def inmapsLinks(user) + Pundit.policy_scope(user, maps).map(&:id) end def calculated_permission defer_to_map&.permission || permission end - def as_json(_options = {}) - super(methods: [:user_name, :user_image, :map_count, :synapse_count, :inmaps, :inmapsLinks, :calculated_permission, :collaborator_ids]) + def as_json(options = {}) + raise 'You must pass a user' unless options[:user].is_a? User + super(methods: [:user_name, :user_image, :calculated_permission, :collaborator_ids]) + .merge(inmaps: inmaps(options[:user]), inmapsLinks: inmapsLinks(options[:user]), + map_count: map_count(options[:user]), synapse_count: synapse_count(options[:user])) end def collaborator_ids diff --git a/app/views/maps/show.html.erb b/app/views/maps/show.html.erb index 951659a8..8bdbfdee 100644 --- a/app/views/maps/show.html.erb +++ b/app/views/maps/show.html.erb @@ -12,7 +12,7 @@ Metamaps.Active.Map = <%= @map.to_json.html_safe %>; Metamaps.Mappers = <%= @allmappers.to_json.html_safe %>; Metamaps.Collaborators = <%= @allcollaborators.to_json.html_safe %>; - Metamaps.Topics = <%= @alltopics.to_json.html_safe %>; + Metamaps.Topics = <%= @alltopics.to_json(user: current_user).html_safe %>; Metamaps.Synapses = <%= @allsynapses.to_json.html_safe %>; Metamaps.Mappings = <%= @allmappings.to_json.html_safe %>; Metamaps.Messages = <%= @allmessages.to_json.html_safe %>; diff --git a/app/views/topics/show.html.erb b/app/views/topics/show.html.erb index 1e79cb57..02a147c4 100644 --- a/app/views/topics/show.html.erb +++ b/app/views/topics/show.html.erb @@ -19,9 +19,9 @@