From ecddd568fa5fc108b0869d66c1925797614565f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Charignon?= Date: Wed, 1 Feb 2023 17:31:05 +0100 Subject: [PATCH] Les admin de structure ne peuvent pas assigner le role CMR --- app/admin/comptes.rb | 9 ++------- app/models/compte.rb | 3 ++- config/locales/models/compte.yml | 5 +++-- spec/features/admin/compte_spec.rb | 6 +++--- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/app/admin/comptes.rb b/app/admin/comptes.rb index 5aaa0b125..5521904f3 100644 --- a/app/admin/comptes.rb +++ b/app/admin/comptes.rb @@ -142,13 +142,8 @@ def peut_modifier_mot_de_passe? end def collection_roles - roles = Compte.roles.to_h - roles.delete('superadmin') unless current_compte.superadmin? - roles.delete('compte_generique') unless current_compte.superadmin? - roles.to_h do |_k, v| - traduction = Compte.human_enum_name(:role, v) - [traduction, v] - end + roles = current_compte.superadmin? ? Compte::ROLES : Compte::ROLES_STRUCTURE + roles.map { |role| [Compte.human_enum_name(:role, role), role] } end end diff --git a/app/models/compte.rb b/app/models/compte.rb index 1677b1568..a1b07cf23 100644 --- a/app/models/compte.rb +++ b/app/models/compte.rb @@ -7,6 +7,7 @@ class Compte < ApplicationRecord devise :database_authenticatable, :trackable, :recoverable, :rememberable, :validatable, :registerable, :confirmable ROLES = %w[superadmin charge_mission_regionale admin conseiller compte_generique].freeze + ROLES_STRUCTURE = %w[admin conseiller].freeze ADMIN_ROLES = %w[superadmin admin compte_generique].freeze ANLCI_ROLES = %w[superadmin charge_mission_regionale].freeze include Comptes::EnvoieEmails @@ -15,7 +16,7 @@ class Compte < ApplicationRecord validates :statut_validation, presence: true validates :nom, :prenom, presence: { on: :create } validate :verifie_dns_email, :structure_a_un_admin - validates :role, inclusion: { in: %w[conseiller compte_generique] }, + validates :role, inclusion: { in: %w[conseiller compte_generique], message: :comptes_refuses }, if: :compte_refuse? validates :email, uniqueness: { case_sensitive: false, diff --git a/config/locales/models/compte.yml b/config/locales/models/compte.yml index 2b2def7a8..830ec08ae 100644 --- a/config/locales/models/compte.yml +++ b/config/locales/models/compte.yml @@ -50,8 +50,9 @@ fr: attributes: role: structure_doit_avoir_un_admin: 'La structure doit avoir au moins un administrateur' - inclusion: | - Ce compte ne peut pas avoir le rôle %s en étant refusé. Uniquement conseiller ou compte générique + inclusion: n'est pas inclus dans la liste + comptes_refuses: | + ce compte ne peut pas avoir le rôle %s en étant refusé. Uniquement conseiller ou compte générique formtastic: actions: compte: diff --git a/spec/features/admin/compte_spec.rb b/spec/features/admin/compte_spec.rb index e314cd727..b64e8ed8b 100644 --- a/spec/features/admin/compte_spec.rb +++ b/spec/features/admin/compte_spec.rb @@ -73,7 +73,7 @@ end it 'ne permet pas de refuser un admin' do - expect(page).to have_content('Ce compte ne peut pas avoir le rôle admin en étant ' \ + expect(page).to have_content('ce compte ne peut pas avoir le rôle admin en étant ' \ 'refusé. Uniquement conseiller ou compte générique') end end @@ -129,7 +129,7 @@ it do visit edit_admin_compte_path(collegue) select 'Admin' - options = ['', 'Chargé de Mission Régionale', 'Admin', 'Conseiller'] + options = ['', 'Admin', 'Conseiller'] expect(page).to have_select(:compte_role, options: options) expect(page).to have_content 'Accès' @@ -178,7 +178,7 @@ end it 'ne permet pas de refuser un admin' do - expect(page).to have_content('Ce compte ne peut pas avoir le rôle admin en étant ' \ + expect(page).to have_content('ce compte ne peut pas avoir le rôle admin en étant ' \ 'refusé. Uniquement conseiller ou compte générique') end end