Merge pull request #10004 from mfo/add_missing_acl_on_instructeurs_self_management_enabled

secu(instructeurs/groupes_instructeurs): s'assure que seul les instructeurs d'une demarche ayant la gestion activé puisse acceder aux ecrans
This commit is contained in:
mfo 2024-02-16 06:37:45 +00:00 committed by GitHub
commit 3e9abd73e4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 53 additions and 7 deletions

View file

@ -3,6 +3,8 @@ module Instructeurs
include UninterlacePngConcern
include GroupeInstructeursSignatureConcern
before_action :ensure_allowed!
ITEMS_PER_PAGE = 25
def index
@ -98,5 +100,15 @@ module Instructeurs
def instructeur_id
params[:instructeur][:id]
end
def ensure_allowed!
if !(current_administrateur&.owns?(procedure) || procedure.instructeurs_self_management_enabled?)
flash[:alert] = "Vous navez pas le droit de gérer les instructeurs de cette démarche"
redirect_to instructeur_procedure_path(procedure)
end
rescue ActiveRecord::RecordNotFound
flash[:alert] = "Vous navez pas accès à cette démarche"
redirect_to root_path
end
end
end

View file

@ -1,8 +1,8 @@
describe Instructeurs::GroupeInstructeursController, type: :controller do
render_views
let(:administrateurs) { [create(:administrateur, user: instructeur.user)] }
let(:instructeur) { create(:instructeur) }
let(:procedure) { create(:procedure, :published) }
let(:procedure) { create(:procedure, :published, administrateurs:) }
let!(:gi_1_1) { procedure.defaut_groupe_instructeur }
let!(:gi_1_2) { create(:groupe_instructeur, label: 'groupe instructeur 2', procedure: procedure) }
@ -14,11 +14,26 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
sign_in(instructeur.user)
end
describe '#index' do
context 'of a procedure I own' do
before do
get :index, params: { procedure_id: procedure.id }
end
describe "before_action: ensure_allowed!" do
it "is present" do
before_actions = Instructeurs::GroupeInstructeursController
._process_action_callbacks
.filter { |process_action_callbacks| process_action_callbacks.kind == :before }
.map(&:filter)
expect(before_actions).to include(:ensure_allowed!)
end
end
describe '#index (plus, ensure_allowed!)' do
context 'when i own the procedure' do
before { get :index, params: { procedure_id: procedure.id } }
it { expect(response).to have_http_status(:ok) }
end
context 'when i am an instructeur of the procedure and instructeurs_self_management_enabled is true' do
let(:procedure) { create(:procedure, :published, administrateurs: [create(:administrateur)], instructeurs_self_management_enabled: true) }
before { get :index, params: { procedure_id: procedure.id } }
context 'when a procedure has multiple groups' do
it { expect(response).to have_http_status(:ok) }
@ -27,6 +42,25 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
it { expect(response.body).not_to include(gi_2_2.label) }
end
end
context 'when i am an instructor of the procedure, and instructeurs_self_management_enabled is false' do
let(:procedure) { create(:procedure, :published, administrateurs: [create(:administrateur)], instructeurs_self_management_enabled: false) }
before { get :index, params: { procedure_id: procedure.id } }
it { expect(response).to have_http_status(:redirect) }
it { expect(flash.alert).to eq("Vous navez pas le droit de gérer les instructeurs de cette démarche") }
end
context 'i am an instructor, not on the procedure' do
let(:procedure) { create(:procedure, :published, administrateurs: [create(:administrateur)], instructeurs_self_management_enabled: true) }
before do
sign_in(create(:instructeur).user)
get :index, params: { procedure_id: procedure.id }
end
it { expect(response).to have_http_status(:redirect) }
it { expect(flash.alert).to eq("Vous navez pas accès à cette démarche") }
end
end
describe '#show' do