Sha256: 96f88cbdf2122a410872e111e98e483bda3abc49e8c9e55995335a01f5178e96

Contents?: true

Size: 1.74 KB

Versions: 15

Compression:

Stored size: 1.74 KB

Contents

# frozen_string_literal: true

module Decidim
  module Accountability
    module Admin
      class Permissions < Decidim::DefaultPermissions
        def permissions
          return permission_action if permission_action.scope != :admin

          permission_action.allow! if can_perform_actions_on?(:result, result)
          permission_action.allow! if can_perform_actions_on?(:status, status)
          permission_action.allow! if can_perform_actions_on?(:timeline_entry, timeline_entry)
          permission_action.allow! if can_perform_actions_on?(:import_projects, nil)

          permission_action
        end

        private

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

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

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

        def can_perform_actions_on?(subject, resource)
          return unless permission_action.subject == subject
          return false if can_create_grandchildren_results?

          case permission_action.subject
          when :import_projects
            case permission_action.action
            when :create, :new
              true if defined?(Decidim::Budgets::Project)
            else
              false
            end
          else
            case permission_action.action
            when :create, :create_children
              true
            when :update, :destroy
              resource.present?
            else
              false
            end
          end
        end

        def can_create_grandchildren_results?
          result&.parent&.present? &&
            permission_action.action == :create_children
        end
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
decidim-accountability-0.29.2 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.28.5 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.29.1 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.28.4 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.29.0 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.28.3 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.29.0.rc4 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.29.0.rc3 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.29.0.rc2 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.29.0.rc1 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.28.2 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.28.1 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.28.0 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.28.0.rc5 app/permissions/decidim/accountability/admin/permissions.rb
decidim-accountability-0.28.0.rc4 app/permissions/decidim/accountability/admin/permissions.rb