feat(Administrateurs::ProcedureAdministrateurs): ensure admin from super admin can not add administrateur

This commit is contained in:
Martin 2022-07-21 16:52:31 +02:00 committed by mfo
parent d1297bc1f5
commit d1544bc4ae
12 changed files with 95 additions and 34 deletions

View file

@ -11,15 +11,15 @@ module Administrateurs
redirect_to admin_procedures_path, status: 404
end
def retrieve_procedure_administration
def is_administrateur_through_procedure_administration_as_manager?
id = params[:procedure_id] || params[:id]
@procedure_administration = current_administrateur.administrateurs_procedures.find_by(procedure_id: id)
end
current_administrateur.administrateurs_procedures
.exists?(procedure_id: id, manager: true)
end
def ensure_not_super_admin!
procedure_administration = retrieve_procedure_administration
if procedure_administration.manager?
if is_administrateur_through_procedure_administration_as_manager?
redirect_back fallback_location: root_url, alert: "Interdit aux super admins", status: 403
end
end

View file

@ -1,7 +1,6 @@
module Administrateurs
class ArchivesController < AdministrateurController
before_action :retrieve_procedure
before_action :retrieve_procedure_administration
before_action :ensure_not_super_admin!
helper_method :create_archive_url

View file

@ -1,8 +1,9 @@
module Administrateurs
class ProcedureAdministrateursController < AdministrateurController
before_action :retrieve_procedure, except: [:new]
before_action :ensure_not_super_admin!, only: [:create]
def index
@disabled_as_super_admin = is_administrateur_through_procedure_administration_as_manager?
end
def create
@ -24,6 +25,7 @@ module Administrateurs
# Actually add the admin
@procedure.administrateurs << administrateur
@administrateur = administrateur
@disabled_as_super_admin = is_administrateur_through_procedure_administration_as_manager?
flash.notice = "Ladministrateur « #{administrateur.email} » a été ajouté à la démarche « #{@procedure.libelle} »."
end

View file

@ -7,16 +7,18 @@ module Instructeurs
end
def ensure_not_super_admin!
if is_super_admin_through_assign_tos_as_manager?
if is_instructeur_through_assign_tos_as_manager?
redirect_back fallback_location: root_url, alert: "Interdit aux super admins", status: 403
end
end
def is_super_admin_through_assign_tos_as_manager?
def is_instructeur_through_assign_tos_as_manager?
procedure_id = params[:procedure_id]
current_instructeur.assign_to
.where(instructeur: current_instructeur,
groupe_instructeur: current_instructeur.groupe_instructeurs.where(procedure_id: @procedure.id),
manager: true)
groupe_instructeur: current_instructeur.groupe_instructeurs.where(procedure_id: procedure_id),
manager: true)
.count
.positive?
end

View file

@ -1,9 +1,9 @@
= form_for procedure.administrateurs.new(user: User.new),
url: { controller: 'procedure_administrateurs' },
html: { class: 'form', id: "new_administrateur" },
html: { class: 'form', id: "new_administrateur" },
data: { turbo: true } do |f|
= f.label :email do
Ajouter un administrateur
%p.notice Renseignez lemail dun administrateur déjà enregistré sur #{APPLICATION_NAME} pour lui permettre de modifier « #{procedure.libelle} ».
= f.email_field :email, placeholder: 'marie.dupont@exemple.fr', required: true
= f.submit 'Ajouter comme administrateur', class: 'button primary send'
= f.email_field :email, placeholder: 'marie.dupont@exemple.fr', required: true, disabled: disabled_as_super_admin
= f.submit 'Ajouter comme administrateur', class: 'button primary send', disabled: disabled_as_super_admin

View file

@ -1,3 +1,3 @@
- if @administrateur.present?
= turbo_stream.append "administrateurs", partial: 'administrateur', locals: { procedure: @procedure, administrateur: @administrateur }
= turbo_stream.replace "new_administrateur", partial: 'add_admin_form', locals: { procedure: @procedure }
= turbo_stream.replace "new_administrateur", partial: 'add_admin_form', locals: { procedure: @procedure, disabled_as_super_admin: @disabled_as_super_admin }

View file

@ -4,7 +4,8 @@
'Administrateurs'], preview: false }
.container
%h1 Administrateurs de « #{@procedure.libelle} »
%h1 Gérer les administrateurs de « #{@procedure.libelle} »
%table.table
%thead
%th= 'Adresse email'
@ -15,4 +16,4 @@
%tfoot
%tr
%th{ colspan: 4 }
= render 'add_admin_form', procedure: @procedure
= render 'add_admin_form', procedure: @procedure, disabled_as_super_admin: @disabled_as_super_admin