Sha256: e5300115f526c760713128be4accd31737536bf24695e47936d9a8a42486571e

Contents?: true

Size: 1.88 KB

Versions: 2

Compression:

Stored size: 1.88 KB

Contents

module Sufia
  module Ability
    extend ActiveSupport::Concern

    included do
      self.ability_logic += [:user_abilities,
                             :featured_work_abilities,
                             :editor_abilities,
                             :stats_abilities,
                             :citation_abilities,
                             :proxy_deposit_abilities,
                             :uploaded_file_abilities]
    end

    def uploaded_file_abilities
      return unless registered_user?
      can :create, UploadedFile
      can :destroy, UploadedFile, user: current_user
    end

    def proxy_deposit_abilities
      can :transfer, String do |id|
        depositor_for_document(id) == current_user.user_key
      end
      can :create, ProxyDepositRequest if registered_user?
      can :accept, ProxyDepositRequest, receiving_user_id: current_user.id, status: 'pending'
      can :reject, ProxyDepositRequest, receiving_user_id: current_user.id, status: 'pending'
      # a user who sent a proxy deposit request can cancel it if it's pending.
      can :destroy, ProxyDepositRequest, sending_user_id: current_user.id, status: 'pending'
    end

    def user_abilities
      can [:edit, :update, :toggle_trophy], ::User, id: current_user.id
    end

    def featured_work_abilities
      can [:create, :destroy, :update], FeaturedWork if admin?
    end

    def editor_abilities
      can :read, ContentBlock
      return unless admin?

      can :create, TinymceAsset
      can [:create, :update], ContentBlock
      can :edit, ::SolrDocument
    end

    def stats_abilities
      can :read, Sufia::Statistics if admin?
      alias_action :stats, to: :read
    end

    def citation_abilities
      alias_action :citation, to: :read
    end

    private

      def depositor_for_document(document_id)
        ::GenericWork.load_instance_from_solr(document_id).depositor
      end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sufia-7.0.0.beta4 app/models/concerns/sufia/ability.rb
sufia-7.0.0.beta3 app/models/concerns/sufia/ability.rb