Sha256: 1dd7bff23792b1943d1f9f796a272592f5ab03d3bfc13d864405392844b12e97

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

module Decidim
  module Lausanne
    module Budgets
      module Admin
        class Permissions < Decidim::DefaultPermissions
          def permissions
            return permission_action unless user
            return permission_action if permission_action.scope != :admin

            case permission_action.subject
            when :budget
              case permission_action.action
              when :create, :read, :export
                allow!
              when :update
                toggle_allow(budget)
              when :delete, :publish, :unpublish
                toggle_allow(budget && budget.projects.empty?)
              end
            when :project, :projects
              case permission_action.action
              when :create
                permission_action.allow!
              when :import_proposals
                permission_action.allow!
              when :update, :destroy
                permission_action.allow! if project.present?
              end
            end

            permission_action
          end

          private

            def budget
              @budget ||= context.fetch(:budget, nil)
            end

            def project
              @project ||= context.fetch(:project, nil)
            end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
decidim-lausanne-budgets-0.1.0 app/permissions/decidim/lausanne/budgets/admin/permissions.rb