feat(ExportComponent): only render it when connected instructeur/administrateur is not from manager

This commit is contained in:
Martin 2022-07-21 19:14:21 +02:00 committed by mfo
parent 25c0e91d87
commit 711b2ee2e4
14 changed files with 30 additions and 27 deletions

View file

@ -1,6 +1,7 @@
module Administrateurs
class AdministrateurController < ApplicationController
before_action :authenticate_administrateur!
helper_method :is_administrateur_through_procedure_administration_as_manager?
def retrieve_procedure
id = params[:procedure_id] || params[:id]
@ -11,19 +12,6 @@ module Administrateurs
redirect_to admin_procedures_path, status: 404
end
def is_administrateur_through_procedure_administration_as_manager?
id = params[:procedure_id] || params[:id]
current_administrateur.administrateurs_procedures
.exists?(procedure_id: id, manager: true)
end
def ensure_not_super_admin!
if is_administrateur_through_procedure_administration_as_manager?
redirect_back fallback_location: root_url, alert: "Interdit aux super admins", status: 403
end
end
def procedure_locked?
if @procedure.locked?
flash.alert = 'Démarche verrouillée'
@ -43,5 +31,20 @@ module Administrateurs
@procedure.reset!
end
end
def ensure_not_super_admin!
if is_administrateur_through_procedure_administration_as_manager?
redirect_back fallback_location: root_url, alert: "Interdit aux super admins", status: 403
end
end
private
def is_administrateur_through_procedure_administration_as_manager?
id = params[:procedure_id] || params[:id]
current_administrateur.administrateurs_procedures
.exists?(procedure_id: id, manager: true)
end
end
end

View file

@ -13,7 +13,6 @@ module Administrateurs
def index
@procedure = procedure
@disabled_as_super_admin = is_administrateur_through_procedure_administration_as_manager?
if procedure.routee?
@groupes_instructeurs = paginated_groupe_instructeurs
@ -31,7 +30,6 @@ module Administrateurs
@groupe_instructeur = groupe_instructeur
@instructeurs = paginated_instructeurs
@available_instructeur_emails = available_instructeur_emails
@disabled_as_super_admin = is_administrateur_through_procedure_administration_as_manager?
end
def create

View file

@ -4,7 +4,6 @@ module Administrateurs
before_action :ensure_not_super_admin!, only: [:create]
def index
@disabled_as_super_admin = is_administrateur_through_procedure_administration_as_manager?
end
def create
@ -26,7 +25,6 @@ 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

@ -12,6 +12,8 @@ module Instructeurs
end
end
private
def is_instructeur_through_assign_tos_as_manager?
procedure_id = params[:procedure_id]

View file

@ -61,7 +61,7 @@ module Instructeurs
@counts = current_instructeur
.dossiers_count_summary(groupe_instructeur_ids)
.symbolize_keys
@can_download_dossiers = (@counts[:tous] + @counts[:archives]) > 0
@can_download_dossiers = (@counts[:tous] + @counts[:archives]) > 0 && !is_instructeur_through_assign_tos_as_manager?
dossiers = Dossier.where(groupe_instructeur_id: groupe_instructeur_ids)
dossiers_count = @counts[statut.underscore.to_sym]
@ -102,7 +102,7 @@ module Instructeurs
@a_suivre_count, @suivis_count, @traites_count, @tous_count, @archives_count, @supprimes_recemment_count, @expirant_count = current_instructeur
.dossiers_count_summary(groupe_instructeur_ids)
.fetch_values('a_suivre', 'suivis', 'traites', 'tous', 'archives', 'supprimes_recemment', 'expirant')
@can_download_dossiers = (@tous_count + @archives_count) > 0
@can_download_dossiers = (@tous_count + @archives_count) > 0 && !is_instructeur_through_assign_tos_as_manager?
notifications = current_instructeur.notifications_for_groupe_instructeurs(groupe_instructeur_ids)
@has_en_cours_notifications = notifications[:en_cours].present?
@ -146,7 +146,7 @@ module Instructeurs
@can_download_dossiers = current_instructeur
.dossiers
.visible_by_administration
.exists?(groupe_instructeur_id: groupe_instructeur_ids)
.exists?(groupe_instructeur_id: groupe_instructeur_ids) && !is_instructeur_through_assign_tos_as_manager?
export = Export.find_or_create_export(export_format, groupe_instructeurs, **export_options)

View file

@ -26,9 +26,9 @@
# last_champ_updated_at :datetime
# last_commentaire_updated_at :datetime
# motivation :text
# private_search_terms :string
# private_search_terms :text
# processed_at :datetime
# search_terms :string
# search_terms :text
# state :string
# termine_close_to_expiration_notice_sent_at :datetime
# created_at :datetime

View file

@ -7,6 +7,7 @@
.container
%h1.mb-2
Archives
- # index not renderable as administrateur flagged as manager, so render it anyway
= render Dossiers::ExportComponent.new(procedure: @procedure, exports: @exports, export_url: method(:download_admin_procedure_exports_path))
= render partial: "shared/archives/notice"

View file

@ -1,3 +1,4 @@
- # not renderable as administrateur flagged as manager, so render it anyway
- if @can_download_dossiers
= turbo_stream.update_all '.procedure-actions' do
= render Dossiers::ExportComponent.new(procedure: @procedure, exports: @exports, count: @dossiers_count, export_url: method(:admin_procedure_exports_path))

View file

@ -22,4 +22,4 @@
groupe_instructeur: @procedure.defaut_groupe_instructeur,
instructeurs: @instructeurs,
available_instructeur_emails: @available_instructeur_emails,
disabled_as_super_admin: @disabled_as_super_admin }
disabled_as_super_admin: is_administrateur_through_procedure_administration_as_manager? }

View file

@ -11,4 +11,4 @@
groupe_instructeur: @groupe_instructeur,
instructeurs: @instructeurs,
available_instructeur_emails: @available_instructeur_emails,
disabled_as_super_admin: @disabled_as_super_admin }
disabled_as_super_admin: is_administrateur_through_procedure_administration_as_manager? }

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, disabled_as_super_admin: @disabled_as_super_admin }
= turbo_stream.replace "new_administrateur", partial: 'add_admin_form', locals: { procedure: @procedure, disabled_as_super_admin: is_administrateur_through_procedure_administration_as_manager? }

View file

@ -16,4 +16,4 @@
%tfoot
%tr
%th{ colspan: 4 }
= render 'add_admin_form', procedure: @procedure, disabled_as_super_admin: @disabled_as_super_admin
= render 'add_admin_form', procedure: @procedure, disabled_as_super_admin: is_administrateur_through_procedure_administration_as_manager?

View file

@ -1,3 +1,4 @@
- # not renderable as instructeur flagged as manager, so render it anyway
- if @can_download_dossiers
- if @statut.nil?
= turbo_stream.update_all '.procedure-actions' do

View file

@ -16,7 +16,6 @@ describe 'Manage procedure instructeurs', js: true do
scenario 'it works' do
visit admin_procedure_path(procedure)
byebug
find('#groupe-instructeurs').click
expect(page).to have_css("h1", text: "Gérer les instructeurs et les options d'instruction de « #{procedure.libelle} »")
end