77 lines
2.1 KiB
Ruby
77 lines
2.1 KiB
Ruby
|
module Carto
|
||
|
module Api
|
||
|
class OrganizationAssetsController < ::Api::ApplicationController
|
||
|
ssl_required :index, :show, :create, :destroy
|
||
|
|
||
|
before_filter :load_organization,
|
||
|
:organization_members_only
|
||
|
before_filter :organization_owners_only, only: [:create, :destroy]
|
||
|
before_filter :load_asset, only: [:show, :destroy]
|
||
|
before_filter :load_resource, only: :create
|
||
|
|
||
|
rescue_from LoadError,
|
||
|
UnprocesableEntityError,
|
||
|
UnauthorizedError, with: :rescue_from_carto_error
|
||
|
|
||
|
def index
|
||
|
presentation = @organization.assets.map do |asset|
|
||
|
AssetPresenter.new(asset).to_hash
|
||
|
end
|
||
|
|
||
|
render json: presentation
|
||
|
end
|
||
|
|
||
|
def show
|
||
|
render json: AssetPresenter.new(@asset).to_hash
|
||
|
end
|
||
|
|
||
|
def create
|
||
|
asset = Asset.for_organization(organization: @organization,
|
||
|
resource: @resource)
|
||
|
|
||
|
asset.save!
|
||
|
render json: AssetPresenter.new(asset), status: :created
|
||
|
rescue ActiveRecord::RecordInvalid => exception
|
||
|
raise UnprocesableEntityError.with_full_messages(exception)
|
||
|
end
|
||
|
|
||
|
def destroy
|
||
|
@asset.destroy
|
||
|
|
||
|
head :no_content
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def load_organization
|
||
|
@organization = Organization.find(params[:organization_id])
|
||
|
rescue ActiveRecord::RecordNotFound
|
||
|
raise LoadError.new('Organization not found')
|
||
|
end
|
||
|
|
||
|
def organization_members_only
|
||
|
unless current_viewer.belongs_to_organization?(@organization)
|
||
|
raise UnauthorizedError.new
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def organization_owners_only
|
||
|
raise UnauthorizedError.new unless @organization.owner?(current_viewer)
|
||
|
end
|
||
|
|
||
|
def load_asset
|
||
|
@asset = Asset.find(params[:id])
|
||
|
rescue ActiveRecord::RecordNotFound
|
||
|
raise LoadError.new('Asset not found')
|
||
|
end
|
||
|
|
||
|
def load_resource
|
||
|
@resource = params[:resource]
|
||
|
unless @resource.present?
|
||
|
raise UnprocesableEntityError.new('Missing resource for asset')
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|