diff --git a/app/models/user.rb b/app/models/user.rb index 4f679c1b..8993054a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -65,6 +65,10 @@ class User < ApplicationRecord json end + def all_accessible_maps + maps + shared_maps + end + def recentMetacodes array = [] self.topics.sort{|a,b| b.created_at <=> a.created_at }.each do |t| diff --git a/app/policies/mapping_policy.rb b/app/policies/mapping_policy.rb index efcb798b..d9d230d7 100644 --- a/app/policies/mapping_policy.rb +++ b/app/policies/mapping_policy.rb @@ -8,11 +8,11 @@ class MappingPolicy < ApplicationPolicy # a private topic, since you can't see the private topic anyways visible = %w(public commons) permission = 'maps.permission IN (?)' - if user - scope.joins(:map).where(permission, visible).or(scope.joins(:map).where(user_id: user.id)) - else - scope.joins(:map).where(permission, visible) - end + return scope.joins(:map).where(permission, visible) unless user + + scope.joins(:map).where(permission, visible) + .or(scope.joins(:map).where('maps.id IN (?)', user.shared_maps.map(&:id))) + .or(scope.joins(:map).where('maps.user_id = ?', user.id)) end end diff --git a/app/policies/message_policy.rb b/app/policies/message_policy.rb index f35a2895..0c37d800 100644 --- a/app/policies/message_policy.rb +++ b/app/policies/message_policy.rb @@ -4,11 +4,11 @@ class MessagePolicy < ApplicationPolicy def resolve visible = %w(public commons) permission = 'maps.permission IN (?)' - if user - scope.joins(:maps).where(permission + ' OR maps.user_id = ?', visible, user.id) - else - scope.where(permission, visible) - end + return scope.joins(:map).where(permission, visible) unless user + + scope.joins(:map).where(permission, visible) + .or(scope.joins(:map).where('maps.id IN (?)', user.shared_maps.map(&:id))) + .or(scope.joins(:map).where('maps.user_id = ?', user.id)) end end diff --git a/app/policies/synapse_policy.rb b/app/policies/synapse_policy.rb index eae820b3..863ab17b 100644 --- a/app/policies/synapse_policy.rb +++ b/app/policies/synapse_policy.rb @@ -7,7 +7,7 @@ class SynapsePolicy < ApplicationPolicy return scope.where(permission: visible) unless user scope.where(permission: visible) - .or(scope.where(defer_to_map_id: user.shared_maps.map(&:id))) + .or(scope.where(defer_to_map_id: user.all_accessible_maps.map(&:id))) .or(scope.where(user_id: user.id)) end end diff --git a/app/policies/topic_policy.rb b/app/policies/topic_policy.rb index 7bcf585c..d51bb062 100644 --- a/app/policies/topic_policy.rb +++ b/app/policies/topic_policy.rb @@ -6,7 +6,7 @@ class TopicPolicy < ApplicationPolicy return scope.where(permission: visible) unless user scope.where(permission: visible) - .or(scope.where(defer_to_map_id: user.shared_maps.map(&:id))) + .or(scope.where(defer_to_map_id: user.all_accessible_maps.map(&:id))) .or(scope.where(user_id: user.id)) end end