d1680c1895
when the topic or synapse no longer appears on any maps, and this can currently only be performed over the api
62 lines
1.1 KiB
Ruby
62 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
|