diff --git a/app/domain/jubla/role/null_alumnus_manager.rb b/app/domain/jubla/role/null_alumnus_manager.rb new file mode 100644 index 00000000..52d50e76 --- /dev/null +++ b/app/domain/jubla/role/null_alumnus_manager.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +# Copyright (c) 2024-2024, Jungwacht Blauring Schweiz. This file is part of +# hitobito_jubla and licensed under the Affero General Public License version 3 +# or later. See the COPYING file at the top-level directory or at +# https://github.com/hitobito/hitobito_jubla. + +# Implementation of the NullObject-Pattern +# +# Mimics an AlumnusManager, but does nothing. Intended as a temporary drop-in +# to gradually phase out the previous alumnus-logic +module Jubla::Role + class NullAlumnusManager + def create = true + + def destroy = true + end +end diff --git a/app/models/group/kanton_ehemaligenverein.rb b/app/models/group/kanton_ehemaligenverein.rb index 2f1f12dd..21e77849 100644 --- a/app/models/group/kanton_ehemaligenverein.rb +++ b/app/models/group/kanton_ehemaligenverein.rb @@ -8,31 +8,31 @@ class Group::KantonEhemaligenverein < ::Group ### ROLES - class Leader < ::Role + class Leader < ::NejbRole self.permissions = [:group_and_below_full, :contact_data] end - class GroupAdmin < ::Role + class GroupAdmin < ::NejbRole self.permissions = [:group_and_below_full] end - class Treasurer < ::Role + class Treasurer < ::NejbRole self.permissions = [:group_and_below_read] end - class NejbMember < ::Role + class NejbMember < ::NejbRole self.permissions = [:group_read] end - class NejbJoiner < ::Role + class NejbJoiner < ::NejbRole self.permissions = [] end - class External < ::Role + class External < ::NejbRole self.permissions = [] end - class DispatchAddress < ::Role + class DispatchAddress < ::NejbRole self.permissions = [] end diff --git a/app/models/group/nejb.rb b/app/models/group/nejb.rb index 57267350..53817507 100644 --- a/app/models/group/nejb.rb +++ b/app/models/group/nejb.rb @@ -13,15 +13,15 @@ class Group::Nejb < ::Group ### ROLES - class GroupAdmin < ::Role + class GroupAdmin < ::NejbRole self.permissions = [:group_full] end - class DispatchAddress < ::Role + class DispatchAddress < ::NejbRole self.permissions = [] end - class ITSupport < ::Role + class ITSupport < ::NejbRole self.permissions = [:admin, :impersonation] end diff --git a/app/models/group/nejb_bundesleitung.rb b/app/models/group/nejb_bundesleitung.rb index 98b84df5..d6ed0a17 100644 --- a/app/models/group/nejb_bundesleitung.rb +++ b/app/models/group/nejb_bundesleitung.rb @@ -6,7 +6,7 @@ # https://github.com/hitobito/hitobito_jubla. class Group::NejbBundesleitung < ::Group - class GroupAdmin < ::Role + class GroupAdmin < ::NejbRole self.permissions = [:admin, :layer_and_below_full, :contact_data] end diff --git a/app/models/group/nejb_kanton.rb b/app/models/group/nejb_kanton.rb index 237362fe..f3754396 100644 --- a/app/models/group/nejb_kanton.rb +++ b/app/models/group/nejb_kanton.rb @@ -9,7 +9,7 @@ class Group::NejbKanton < ::Group children Group::KantonEhemaligenverein, Group::NejbRegion self.layer = true - class GroupAdmin < ::Role + class GroupAdmin < ::NejbRole self.permissions = [:admin, :layer_and_below_full, :contact_data] end diff --git a/app/models/group/nejb_region.rb b/app/models/group/nejb_region.rb index 6d7a9a51..0c272009 100644 --- a/app/models/group/nejb_region.rb +++ b/app/models/group/nejb_region.rb @@ -9,7 +9,7 @@ class Group::NejbRegion < ::Group children Group::RegionEhemaligenverein, Group::NejbSchar self.layer = true - class GroupAdmin < ::Role + class GroupAdmin < ::NejbRole self.permissions = [:admin, :layer_and_below_full, :contact_data] end diff --git a/app/models/group/nejb_schar.rb b/app/models/group/nejb_schar.rb index a1f7db84..6159b4a7 100644 --- a/app/models/group/nejb_schar.rb +++ b/app/models/group/nejb_schar.rb @@ -10,31 +10,31 @@ class Group::NejbSchar < ::Group ### ROLES - class Leader < ::Role + class Leader < ::NejbRole self.permissions = [:group_and_below_full, :contact_data] end - class GroupAdmin < ::Role + class GroupAdmin < ::NejbRole self.permissions = [:group_and_below_full] end - class Treasurer < ::Role + class Treasurer < ::NejbRole self.permissions = [:group_and_below_read] end - class NejbMember < ::Role + class NejbMember < ::NejbRole self.permissions = [:group_read] end - class NejbJoiner < ::Role + class NejbJoiner < ::NejbRole self.permissions = [] end - class External < ::Role + class External < ::NejbRole self.permissions = [] end - class DispatchAddress < ::Role + class DispatchAddress < ::NejbRole self.permissions = [] end diff --git a/app/models/group/netzwerk_ehemalige_jungwacht_blauring.rb b/app/models/group/netzwerk_ehemalige_jungwacht_blauring.rb index c599be58..f3370bff 100644 --- a/app/models/group/netzwerk_ehemalige_jungwacht_blauring.rb +++ b/app/models/group/netzwerk_ehemalige_jungwacht_blauring.rb @@ -8,39 +8,39 @@ class Group::NetzwerkEhemaligeJungwachtBlauring < ::Group ### ROLES - class Leader < ::Role + class Leader < ::NejbRole self.permissions = [:group_and_below_full, :contact_data] end - class GroupAdmin < ::Role + class GroupAdmin < ::NejbRole self.permissions = [:group_and_below_full] end - class Treasurer < ::Role + class Treasurer < ::NejbRole self.permissions = [:group_and_below_read] end - class ActiveMember < ::Role + class ActiveMember < ::NejbRole self.permissions = [:group_read] end - class PassiveMember < ::Role + class PassiveMember < ::NejbRole self.permissions = [:group_read] end - class CollectiveMember < ::Role + class CollectiveMember < ::NejbRole self.permissions = [:group_read] end - class NejbJoiner < ::Role + class NejbJoiner < ::NejbRole self.permissions = [] end - class External < ::Role + class External < ::NejbRole self.permissions = [] end - class DispatchAddress < ::Role + class DispatchAddress < ::NejbRole self.permissions = [] end diff --git a/app/models/group/region_ehemaligenverein.rb b/app/models/group/region_ehemaligenverein.rb index f7933360..1faf80f0 100644 --- a/app/models/group/region_ehemaligenverein.rb +++ b/app/models/group/region_ehemaligenverein.rb @@ -8,31 +8,31 @@ class Group::RegionEhemaligenverein < ::Group ### ROLES - class Leader < ::Role + class Leader < ::NejbRole self.permissions = [:group_and_below_full, :contact_data] end - class GroupAdmin < ::Role + class GroupAdmin < ::NejbRole self.permissions = [:group_and_below_full] end - class Treasurer < ::Role + class Treasurer < ::NejbRole self.permissions = [:group_and_below_read] end - class NejbMember < ::Role + class NejbMember < ::NejbRole self.permissions = [:group_read] end - class NejbJoiner < ::Role + class NejbJoiner < ::NejbRole self.permissions = [] end - class External < ::Role + class External < ::NejbRole self.permissions = [] end - class DispatchAddress < ::Role + class DispatchAddress < ::NejbRole self.permissions = [] end diff --git a/app/models/group/root.rb b/app/models/group/root.rb index 4243abb7..9fef9a92 100644 --- a/app/models/group/root.rb +++ b/app/models/group/root.rb @@ -9,22 +9,16 @@ class Group::Root < ::Group self.layer = true self.event_types = [] - class NullAlumnusManager - def create = true - - def destroy = true - end - class Admin < ::Role self.permissions = [:layer_and_below_full, :admin] self.two_factor_authentication_enforced = true - def skip_alumnus_callbacks + def skip_alumnus_callback true end def alumnus_manager - @alumnus_manager ||= NullAlumnusManager.new + @alumnus_manager ||= Jubla::Role::NullAlumnusManager.new end end diff --git a/app/models/nejb_role.rb b/app/models/nejb_role.rb new file mode 100644 index 00000000..20334d53 --- /dev/null +++ b/app/models/nejb_role.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +# Copyright (c) 2024-2024, Jungwacht Blauring Schweiz. This file is part of +# hitobito_jubla and licensed under the Affero General Public License version 3 +# or later. See the COPYING file at the top-level directory or at +# https://github.com/hitobito/hitobito_jubla. + +class NejbRole < Role + module AlumnusFreeRole + def skip_alumnus_callback + true + end + + def alumnus_manager + @alumnus_manager ||= Jubla::Role::NullAlumnusManager.new + end + end + include AlumnusFreeRole +end diff --git a/spec/domain/jubla/role/null_alumnus_manager_spec.rb b/spec/domain/jubla/role/null_alumnus_manager_spec.rb new file mode 100644 index 00000000..49902a31 --- /dev/null +++ b/spec/domain/jubla/role/null_alumnus_manager_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +# Copyright (c) 2024-2024, Jungwacht Blauring Schweiz. This file is part of +# hitobito_jubla and licensed under the Affero General Public License version 3 +# or later. See the COPYING file at the top-level directory or at +# https://github.com/hitobito/hitobito_jubla. + +require "spec_helper" + +describe Jubla::Role::NullAlumnusManager do + it "has a create-method" do + expect(subject.create).to be_truthy + end + + it "has a destroy-method" do + expect(subject.destroy).to be_truthy + end +end diff --git a/spec/models/nejb_role_spec.rb b/spec/models/nejb_role_spec.rb new file mode 100644 index 00000000..93b25976 --- /dev/null +++ b/spec/models/nejb_role_spec.rb @@ -0,0 +1,34 @@ +# Copyright (c) 2012-2024, Jungwacht Blauring Schweiz. This file is part of +# hitobito_jubla and licensed under the Affero General Public License version 3 +# or later. See the COPYING file at the top-level directory or at +# https://github.com/hitobito/hitobito_jubla. + +require "spec_helper" + +describe NejbRole do + it "is a Role" do + expect(subject).to be_a Role + end + + it "is a Jubla::Role" do + expect(subject).to be_a Jubla::Role + end + + it "disables the alumnus-callback" do + expect(subject.skip_alumnus_callback).to be_truthy + end + + it "uses the NullAlumnusManager" do + expect(subject.alumnus_manager).to be_a Jubla::Role::NullAlumnusManager + end + + %w[ + Group::NejbSchar::GroupAdmin + ].each do |role| + context role do + it "is a NeJbRole" do + expect(role.safe_constantize.new).to be_a NejbRole + end + end + end +end