Sha256: c24272450536633e7de9d1dc1e39ab00c9406a2fcb3f1247b73bac73cc170d15

Contents?: true

Size: 1.76 KB

Versions: 7

Compression:

Stored size: 1.76 KB

Contents

# frozen_string_literal: true

module Decidim
  module Meetings
    module Admin
      class Permissions < Decidim::DefaultPermissions
        def permissions
          return permission_action unless user
          return permission_action unless permission_action.scope == :admin

          allowed_meeting_action?
          allowed_agenda_action?
          allowed_minutes_action?

          permission_action
        end

        private

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

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

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

        def allowed_meeting_action?
          return unless permission_action.subject == :meeting

          case permission_action.action
          when :close, :copy, :destroy, :export_registrations, :update, :read_invites
            toggle_allow(meeting.present?)
          when :invite_attendee
            toggle_allow(meeting.present? && meeting.registrations_enabled?)
          when :create
            allow!
          end
        end

        def allowed_agenda_action?
          return unless permission_action.subject == :agenda

          case permission_action.action
          when :create
            toggle_allow(meeting.present?)
          when :update
            toggle_allow(agenda.present? && meeting.present?)
          end
        end

        def allowed_minutes_action?
          return unless permission_action.subject == :minutes

          case permission_action.action
          when :create
            toggle_allow(meeting.present?)
          when :update
            toggle_allow(minutes.present? && meeting.present?)
          end
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
decidim-meetings-0.15.2 app/permissions/decidim/meetings/admin/permissions.rb
decidim-meetings-0.15.1 app/permissions/decidim/meetings/admin/permissions.rb
decidim-meetings-0.15.0 app/permissions/decidim/meetings/admin/permissions.rb
decidim-meetings-0.14.4 app/permissions/decidim/meetings/admin/permissions.rb
decidim-meetings-0.14.3 app/permissions/decidim/meetings/admin/permissions.rb
decidim-meetings-0.14.2 app/permissions/decidim/meetings/admin/permissions.rb
decidim-meetings-0.14.1 app/permissions/decidim/meetings/admin/permissions.rb