From c5eae01d734e039e3fab4b195c0e16bfdbc32f4e Mon Sep 17 00:00:00 2001 From: Jamie Date: Fri, 4 Oct 2024 11:39:19 +0100 Subject: [PATCH] Remove current organisation --- .../placements/application_controller.rb | 15 ---------- .../placements/organisations_controller.rb | 5 ---- .../providers/placements_controller.rb | 5 +++- app/models/placements/support_user.rb | 2 -- app/models/placements/user.rb | 2 -- app/policies/placement_policy.rb | 10 ++----- app/policies/placements/mentor_policy.rb | 2 +- .../placements/provider/placement_policy.rb | 7 +++++ app/policies/placements/user_policy.rb | 10 +++---- app/policies/provider_policy.rb | 2 +- app/policies/school_policy.rb | 6 +--- config/analytics_blocklist.yml | 1 - spec/models/placements/support_user_spec.rb | 4 --- spec/models/placements/user_spec.rb | 4 --- spec/policies/placement_policy_spec.rb | 22 -------------- .../policies/placements/mentor_policy_spec.rb | 1 - .../provider/placement_policy_spec.rb | 30 +++++++++++++++++++ spec/policies/placements/user_policy_spec.rb | 1 - spec/policies/provider_policy_spec.rb | 1 - spec/policies/school_policy_spec.rb | 8 ----- spec/policies/user_membership_policy_spec.rb | 1 - 21 files changed, 52 insertions(+), 87 deletions(-) create mode 100644 app/policies/placements/provider/placement_policy.rb create mode 100644 spec/policies/placements/provider/placement_policy_spec.rb diff --git a/app/controllers/placements/application_controller.rb b/app/controllers/placements/application_controller.rb index 0be73b499..db89d81ac 100644 --- a/app/controllers/placements/application_controller.rb +++ b/app/controllers/placements/application_controller.rb @@ -2,21 +2,6 @@ class Placements::ApplicationController < ApplicationController after_action :verify_policy_scoped, if: ->(c) { c.action_name == "index" } before_action :authorize_support_user! - def current_user - @current_user ||= sign_in_user&.user&.tap do |user| - organisation_id = session.dig("current_organisation", "id") - organisation_type = session.dig("current_organisation", "type") - organisation = user.user_memberships.find_by(organisation_id:, organisation_type:)&.organisation - - user.current_organisation = case organisation - when School - organisation.becomes(Placements::School) - when Provider - organisation.becomes(Placements::Provider) - end - end - end - private def authorize_support_user! diff --git a/app/controllers/placements/organisations_controller.rb b/app/controllers/placements/organisations_controller.rb index ea4127a3e..65ca0e2af 100644 --- a/app/controllers/placements/organisations_controller.rb +++ b/app/controllers/placements/organisations_controller.rb @@ -24,14 +24,9 @@ def memberships def load_organisation(membership) organisation = membership.organisation - set_current_organisation(organisation) redirect_to landing_page_path(organisation) end - def set_current_organisation(organisation) - session["current_organisation"] = { "id" => organisation.id, "type" => organisation.class.name } - end - def landing_page_path(organisation) if organisation.is_a?(School) placements_school_placements_path(organisation) diff --git a/app/controllers/placements/providers/placements_controller.rb b/app/controllers/placements/providers/placements_controller.rb index a38132346..6a190152f 100644 --- a/app/controllers/placements/providers/placements_controller.rb +++ b/app/controllers/placements/providers/placements_controller.rb @@ -10,7 +10,10 @@ def index @schools = schools_scope.order_by_name.select(:id, :name) @year_groups ||= Placement.year_groups_as_options @terms = Placements::Term.order_by_term.select(:id, :name) - scope = policy_scope(Placements::PlacementsQuery.call(params: query_params)) + scope = policy_scope( + Placements::PlacementsQuery.call(params: query_params), + policy_scope_class: Placements::Provider::PlacementPolicy::Scope, + ) @pagy, @placements = pagy(scope) end diff --git a/app/models/placements/support_user.rb b/app/models/placements/support_user.rb index 85f6908b6..68e9909d2 100644 --- a/app/models/placements/support_user.rb +++ b/app/models/placements/support_user.rb @@ -20,6 +20,4 @@ # class Placements::SupportUser < User include ActsAsSupportUser - - attribute :current_organisation end diff --git a/app/models/placements/user.rb b/app/models/placements/user.rb index e8be085d2..b9e3a6ae4 100644 --- a/app/models/placements/user.rb +++ b/app/models/placements/user.rb @@ -28,8 +28,6 @@ class Placements::User < User source: :organisation, source_type: "Provider" - attribute :current_organisation - def service :placements end diff --git a/app/policies/placement_policy.rb b/app/policies/placement_policy.rb index 1c858f2a5..a212ceda2 100644 --- a/app/policies/placement_policy.rb +++ b/app/policies/placement_policy.rb @@ -1,13 +1,9 @@ class PlacementPolicy < ApplicationPolicy class Scope < ApplicationPolicy::Scope def resolve - if user.current_organisation.is_a?(Placements::School) - scope.where(school: user.current_organisation) - elsif user.current_organisation.is_a?(Placements::Provider) || user.support_user? - scope - else - scope.none - end + return scope if user.support_user? + + scope.where(school: user.schools) end end diff --git a/app/policies/placements/mentor_policy.rb b/app/policies/placements/mentor_policy.rb index 449f323ba..a66fa6fc4 100644 --- a/app/policies/placements/mentor_policy.rb +++ b/app/policies/placements/mentor_policy.rb @@ -3,7 +3,7 @@ class Scope < ApplicationPolicy::Scope def resolve return scope if user.support_user? - scope.where(id: Placements::MentorMembership.select(:mentor_id).where(school: user.current_organisation)) + scope.where(id: Placements::MentorMembership.select(:mentor_id).where(school: user.schools)) end end end diff --git a/app/policies/placements/provider/placement_policy.rb b/app/policies/placements/provider/placement_policy.rb new file mode 100644 index 000000000..8e05fb234 --- /dev/null +++ b/app/policies/placements/provider/placement_policy.rb @@ -0,0 +1,7 @@ +class Placements::Provider::PlacementPolicy < ApplicationPolicy + class Scope < ApplicationPolicy::Scope + def resolve + scope + end + end +end diff --git a/app/policies/placements/user_policy.rb b/app/policies/placements/user_policy.rb index 602577e63..1175ed3e6 100644 --- a/app/policies/placements/user_policy.rb +++ b/app/policies/placements/user_policy.rb @@ -1,11 +1,11 @@ class Placements::UserPolicy < ApplicationPolicy class Scope < ApplicationPolicy::Scope def resolve - if user.support_user? - scope - else - scope.where(id: UserMembership.select(:user_id).where(organisation: user.current_organisation)) - end + return scope if user.support_user? + + memberships = UserMembership.where(organisation: user.schools) + .or(UserMembership.where(organisation: user.providers)) + scope.where(id: memberships.select(:user_id)) end end end diff --git a/app/policies/provider_policy.rb b/app/policies/provider_policy.rb index 545a29ac9..5086d620c 100644 --- a/app/policies/provider_policy.rb +++ b/app/policies/provider_policy.rb @@ -3,7 +3,7 @@ class Scope < ApplicationPolicy::Scope def resolve return scope if user.support_user? - scope.where(id: user.current_organisation.partner_providers.select(:id)) + scope.where(id: Placements::Partnership.select(:provider_id).where(school: user.schools)) end end end diff --git a/app/policies/school_policy.rb b/app/policies/school_policy.rb index 878848e06..725461336 100644 --- a/app/policies/school_policy.rb +++ b/app/policies/school_policy.rb @@ -3,11 +3,7 @@ class Scope < ApplicationPolicy::Scope def resolve return scope if user.support_user? - if user.current_organisation.is_a?(Placements::School) - scope.where(id: user.current_organisation.partner_providers.select(:id)) - else - scope.where(id: user.current_organisation.partner_schools.select(:id)) - end + scope.where(id: Placements::Partnership.select(:school_id).where(provider: user.providers)) end end end diff --git a/config/analytics_blocklist.yml b/config/analytics_blocklist.yml index 99e4900c1..6b26f611b 100644 --- a/config/analytics_blocklist.yml +++ b/config/analytics_blocklist.yml @@ -103,7 +103,6 @@ shared: - first_name - last_name - email - - current_organisation :mentors: - first_name - last_name diff --git a/spec/models/placements/support_user_spec.rb b/spec/models/placements/support_user_spec.rb index 501080086..b14ef1477 100644 --- a/spec/models/placements/support_user_spec.rb +++ b/spec/models/placements/support_user_spec.rb @@ -21,10 +21,6 @@ require "rails_helper" RSpec.describe Placements::SupportUser do - describe "attributes" do - it { is_expected.to have_attributes(current_organisation: nil) } - end - context "with validations" do subject { build(:placements_support_user) } diff --git a/spec/models/placements/user_spec.rb b/spec/models/placements/user_spec.rb index 0e96df49e..f1e8c0ce8 100644 --- a/spec/models/placements/user_spec.rb +++ b/spec/models/placements/user_spec.rb @@ -38,10 +38,6 @@ end end - describe "attributes" do - it { is_expected.to have_attributes(current_organisation: nil) } - end - describe "default scope" do let(:email) { "same_email@email.co.uk" } let!(:user_with_placements_service) { create(:placements_user, email:) } diff --git a/spec/policies/placement_policy_spec.rb b/spec/policies/placement_policy_spec.rb index 3bf0a87a0..ae2d2291a 100644 --- a/spec/policies/placement_policy_spec.rb +++ b/spec/policies/placement_policy_spec.rb @@ -67,7 +67,6 @@ let(:placement_2) { create(:placement) } before do - user.current_organisation = school placement_2 end @@ -75,26 +74,5 @@ expect(placement_policy::Scope.new(user, scope).resolve).to eq([placement_1]) end end - - context "when the user is a provider user" do - let(:user) { create(:placements_user, providers: [provider]) } - let(:provider) { create(:placements_provider) } - - before do - user.current_organisation = provider - end - - it "returns the provider's placements" do - expect(placement_policy::Scope.new(user, scope).resolve).to eq(scope) - end - end - - context "when the user is none of the above" do - let(:user) { create(:placements_user) } - - it "returns no placements" do - expect(placement_policy::Scope.new(user, scope).resolve).to eq(scope.none) - end - end end end diff --git a/spec/policies/placements/mentor_policy_spec.rb b/spec/policies/placements/mentor_policy_spec.rb index 3e35f5f75..25d6ffd96 100644 --- a/spec/policies/placements/mentor_policy_spec.rb +++ b/spec/policies/placements/mentor_policy_spec.rb @@ -21,7 +21,6 @@ let(:mentor_2) { create(:placements_mentor) } before do - user.current_organisation = school mentor_2 end diff --git a/spec/policies/placements/provider/placement_policy_spec.rb b/spec/policies/placements/provider/placement_policy_spec.rb new file mode 100644 index 000000000..1d129eefd --- /dev/null +++ b/spec/policies/placements/provider/placement_policy_spec.rb @@ -0,0 +1,30 @@ +require "rails_helper" + +RSpec.describe Placements::Provider::PlacementPolicy do + subject(:placement_policy) { described_class } + + describe "scope" do + let(:scope) { Placement.all } + + before do + create_list(:placement, 3) + end + + context "when the user is a support user" do + let(:user) { create(:placements_support_user) } + + it "returns all placements" do + expect(placement_policy::Scope.new(user, scope).resolve).to eq(scope) + end + end + + context "when the user is a provider user" do + let(:provider) { build(:placements_provider) } + let(:user) { create(:placements_user, providers: [provider]) } + + it "returns the school's placements" do + expect(placement_policy::Scope.new(user, scope).resolve).to eq(scope) + end + end + end +end diff --git a/spec/policies/placements/user_policy_spec.rb b/spec/policies/placements/user_policy_spec.rb index 75803b3be..765b0f01f 100644 --- a/spec/policies/placements/user_policy_spec.rb +++ b/spec/policies/placements/user_policy_spec.rb @@ -24,7 +24,6 @@ let(:user_2) { create(:placements_user) } before do - user_1.current_organisation = school user_2 end diff --git a/spec/policies/provider_policy_spec.rb b/spec/policies/provider_policy_spec.rb index c3cbe4192..2c6db3497 100644 --- a/spec/policies/provider_policy_spec.rb +++ b/spec/policies/provider_policy_spec.rb @@ -24,7 +24,6 @@ let(:provider_2) { create(:placements_provider) } before do - user.current_organisation = school provider_2 end diff --git a/spec/policies/school_policy_spec.rb b/spec/policies/school_policy_spec.rb index 46a9b221a..8cd5ff9d5 100644 --- a/spec/policies/school_policy_spec.rb +++ b/spec/policies/school_policy_spec.rb @@ -18,10 +18,6 @@ let(:user) { create(:placements_user, schools: [school]) } let(:school) { create(:placements_school) } - before do - user.current_organisation = school - end - it "returns the school's partner providers" do expect(school_policy::Scope.new(user, scope).resolve).to eq(school.partner_providers) end @@ -31,10 +27,6 @@ let(:user) { create(:placements_user, providers: [provider]) } let(:provider) { create(:placements_provider) } - before do - user.current_organisation = provider - end - it "returns the provider's partner schools" do expect(school_policy::Scope.new(user, scope).resolve).to eq(provider.partner_schools) end diff --git a/spec/policies/user_membership_policy_spec.rb b/spec/policies/user_membership_policy_spec.rb index 4d4b27f80..cd80032c3 100644 --- a/spec/policies/user_membership_policy_spec.rb +++ b/spec/policies/user_membership_policy_spec.rb @@ -17,7 +17,6 @@ let(:user_membership_2) { create(:user_membership) } before do - user.current_organisation = school user_membership_2 end