metamaps--metamaps/app/policies/topic_policy.rb
Connor Turland d1680c1895 disable permanent deletion of topics and synapses, except...
when the topic or synapse no longer appears on any maps, and this can currently only be performed over the api
2016-12-14 14:17:55 -05:00

63 lines
1.1 KiB
Ruby

# frozen_string_literal: true
class TopicPolicy < ApplicationPolicy
class Scope < Scope
def resolve
return scope.where(permission: %w(public commons)) unless user
scope.where(permission: %w(public commons))
.or(scope.where(defer_to_map_id: user.all_accessible_maps.map(&:id)))
.or(scope.where(user_id: user.id))
end
end
def index?
true
end
def create?
user.present?
end
def show?
if record.defer_to_map.present?
map_policy.show?
else
record.permission.in?(['commons', 'public']) || record.user == user
end
end
def update?
return false unless user.present?
if record.defer_to_map.present?
map_policy.update?
else
record.permission == 'commons' || record.user == user
end
end
def destroy?
record.mappings.empty? && (record.user == user || admin_override)
end
def autocomplete_topic?
user.present?
end
def network?
show?
end
def relative_numbers?
show?
end
def relatives?
show?
end
# Helpers
def map_policy
@map_policy ||= Pundit.policy(user, record.defer_to_map)
end
end