Sha256: 1a075a43c760bd4744acaf522d4ae591233790a355b167fc384c6de7712bdcfb

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

# frozen_string_literal: true

module Decidim
  module Templates
    module Admin
      # this is here due a bug in Decidim 0.28 when they introduced proposal answer templates
      # they didn't take into account that valuators can answer proposals
      # This can be removed after https://github.com/decidim/decidim/pull/12765 is merge & backported
      class Permissions < Decidim::DefaultPermissions
        def permissions
          return permission_action if permission_action.scope != :admin
          return permission_action unless user
          return permission_action if context[:current_organization] != user.organization

          if user_has_a_role? && (permission_action.subject == :template && permission_action.action == :read)
            allow!
          else
            return permission_action unless user.admin?

            case permission_action.subject
            when :template
              allow! if [:read, :create, :update, :destroy, :copy].include? permission_action.action
            when :templates
              allow! if permission_action.action == :index
            when :questionnaire
              allow!
            end
          end

          permission_action
        end

        private

        def participatory_space
          @participatory_space ||= context[:proposal].try(:participatory_space)
        end

        def user_roles
          @user_roles ||= participatory_space.try(:user_roles)
        end

        def user_has_a_role?
          return unless user_roles

          user_roles.exists?(user:)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
decidim-reporting_proposals-0.6.0 app/permissions/decidim/templates/admin/permissions.rb