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:
commit
3e9abd73e4
2 changed files with 53 additions and 7 deletions
|
@ -3,6 +3,8 @@ module Instructeurs
|
||||||
include UninterlacePngConcern
|
include UninterlacePngConcern
|
||||||
include GroupeInstructeursSignatureConcern
|
include GroupeInstructeursSignatureConcern
|
||||||
|
|
||||||
|
before_action :ensure_allowed!
|
||||||
|
|
||||||
ITEMS_PER_PAGE = 25
|
ITEMS_PER_PAGE = 25
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
@ -98,5 +100,15 @@ module Instructeurs
|
||||||
def instructeur_id
|
def instructeur_id
|
||||||
params[:instructeur][:id]
|
params[:instructeur][:id]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ensure_allowed!
|
||||||
|
if !(current_administrateur&.owns?(procedure) || procedure.instructeurs_self_management_enabled?)
|
||||||
|
flash[:alert] = "Vous n’avez 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 n’avez pas accès à cette démarche"
|
||||||
|
redirect_to root_path
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
describe Instructeurs::GroupeInstructeursController, type: :controller do
|
describe Instructeurs::GroupeInstructeursController, type: :controller do
|
||||||
render_views
|
render_views
|
||||||
|
let(:administrateurs) { [create(:administrateur, user: instructeur.user)] }
|
||||||
let(:instructeur) { create(:instructeur) }
|
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_1) { procedure.defaut_groupe_instructeur }
|
||||||
let!(:gi_1_2) { create(:groupe_instructeur, label: 'groupe instructeur 2', procedure: procedure) }
|
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)
|
sign_in(instructeur.user)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#index' do
|
describe "before_action: ensure_allowed!" do
|
||||||
context 'of a procedure I own' do
|
it "is present" do
|
||||||
before do
|
before_actions = Instructeurs::GroupeInstructeursController
|
||||||
get :index, params: { procedure_id: procedure.id }
|
._process_action_callbacks
|
||||||
end
|
.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
|
context 'when a procedure has multiple groups' do
|
||||||
it { expect(response).to have_http_status(:ok) }
|
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) }
|
it { expect(response.body).not_to include(gi_2_2.label) }
|
||||||
end
|
end
|
||||||
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 n’avez 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 n’avez pas accès à cette démarche") }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#show' do
|
describe '#show' do
|
||||||
|
|
Loading…
Reference in a new issue