From 74ac4d8cfb1e2bf421550bbded5b6fd0bfd6dc6f Mon Sep 17 00:00:00 2001 From: pabois Date: Mon, 22 Jun 2026 14:27:19 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Nouveau=20r=C3=B4le=20:=20Alumni=20Manager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/dashboard_controller.rb | 2 +- .../admin/university/dashboard_controller.rb | 2 +- .../application_controller/with_features.rb | 8 ++++--- app/models/ability/alumni_manager.rb | 24 +++++++++++++++++++ app/models/user/with_roles.rb | 1 + config/locales/en.yml | 1 + config/locales/fr.yml | 1 + .../admin/administration_navigation.rb | 6 ++--- config/navigation/admin_navigation.rb | 2 +- .../navigation/admin_university_navigation.rb | 11 +++++---- 10 files changed, 44 insertions(+), 14 deletions(-) create mode 100644 app/models/ability/alumni_manager.rb diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index 4dbd6e015e..d0aa1d330d 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -6,7 +6,7 @@ def index @namespaces << Research if feature_research? @namespaces << Communication if feature_communication? @namespaces << Administration if feature_administration? - @namespaces << University if feature_settings? + @namespaces << University if feature_directory? breadcrumb end diff --git a/app/controllers/admin/university/dashboard_controller.rb b/app/controllers/admin/university/dashboard_controller.rb index c8f2c91f46..ff89c91c3d 100644 --- a/app/controllers/admin/university/dashboard_controller.rb +++ b/app/controllers/admin/university/dashboard_controller.rb @@ -1,7 +1,7 @@ class Admin::University::DashboardController < Admin::University::ApplicationController def index - raise_403_unless feature_settings? + raise_403_unless feature_directory? @namespace = University breadcrumb render 'admin/dashboard/namespace' diff --git a/app/controllers/application_controller/with_features.rb b/app/controllers/application_controller/with_features.rb index 606a30426c..bd1ab20bf7 100644 --- a/app/controllers/application_controller/with_features.rb +++ b/app/controllers/application_controller/with_features.rb @@ -25,16 +25,18 @@ def feature_communication? def feature_administration? current_university.is_really_a_university? && - can?(:read, Administration::Qualiopi::Criterion) + can?(:read, Administration::Qualiopi) || + can?(:read, Administration::Location) || + can?(:read, University::Person::Alumnus) end helper_method :feature_administration? - def feature_settings? + def feature_directory? can?(:read, University::Person) || can?(:read, University::Organization) || can?(:read, User) end - helper_method :feature_settings? + helper_method :feature_directory? end diff --git a/app/models/ability/alumni_manager.rb b/app/models/ability/alumni_manager.rb new file mode 100644 index 0000000000..5ae89b19b9 --- /dev/null +++ b/app/models/ability/alumni_manager.rb @@ -0,0 +1,24 @@ +class Ability::AlumniManager < Ability + + def initialize(user) + super + manage_blocks + can :manage, University::Person, university_id: @user.university_id + can :manage, University::Person::Category, university_id: @user.university_id + can :manage, University::Person::Experience, university_id: @user.university_id + can :manage, University::Person::Involvement, university_id: @user.university_id + can :manage, University::Person::Alumnus + can :manage, Import, university_id: @user.university_id + can :manage, Education::AcademicYear, university_id: @user.university_id + can :manage, Education::Cohort, university_id: @user.university_id + end + + protected + + def manage_blocks + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'University::Person::Localization', about_id: University::Person::Localization.where(university_id: @user.university_id).pluck(:id) + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'University::Person::Category::Localization', about_id: University::Person::Category::Localization.where(university_id: @user.university_id).pluck(:id) + can :create, Communication::Block + end + +end diff --git a/app/models/user/with_roles.rb b/app/models/user/with_roles.rb index 14376a6b4e..b9f80698bf 100644 --- a/app/models/user/with_roles.rb +++ b/app/models/user/with_roles.rb @@ -11,6 +11,7 @@ module User::WithRoles teacher: 10, program_manager: 12, website_manager: 15, + alumni_manager: 18, admin: 20, server_admin: 30 } diff --git a/config/locales/en.yml b/config/locales/en.yml index c83a018797..69f63efdd5 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -79,6 +79,7 @@ en: role: Role roles: admin: Administrator + alumni_manager: Alumni Manager author: Author contributor: Contributor program_manager: Program manager diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 0db900d1d9..5e3cec3226 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -79,6 +79,7 @@ fr: role: RĂ´le roles: admin: Administrateur + alumni_manager: Responsable des alumni author: Auteur contributor: Contributeur program_manager: Responsable de formation diff --git a/config/navigation/admin/administration_navigation.rb b/config/navigation/admin/administration_navigation.rb index 7b26a5371e..d72d7a1e9c 100644 --- a/config/navigation/admin/administration_navigation.rb +++ b/config/navigation/admin/administration_navigation.rb @@ -13,15 +13,15 @@ } primary.item :subnav_alumni, t('administration.description.parts.alumnus.title'), - admin_administration_alumni_path + admin_administration_alumni_path if can?(:read, University::Person::Alumnus) primary.item :subnav_locations, t('administration.description.parts.location.title'), - admin_administration_locations_path + admin_administration_locations_path if can?(:read, Administration::Location) primary.item :subnav_qualiopi, t('administration.description.parts.qualiopi.title'), admin_administration_qualiopi_criterions_path, highlights_on: lambda { controller_name.in?(["indicators", "criterions"]) - } + } if can?(:read, Administration::Qualiopi) end end diff --git a/config/navigation/admin_navigation.rb b/config/navigation/admin_navigation.rb index 94187dad73..fb83571614 100644 --- a/config/navigation/admin_navigation.rb +++ b/config/navigation/admin_navigation.rb @@ -14,6 +14,6 @@ secondary.item :directory_persons, University::Person.model_name.human(count: 2), admin_university_people_path secondary.item :directory_organizations, University::Organization.model_name.human(count: 2), admin_university_organizations_path secondary.item :directory_users, User.model_name.human(count: 2), admin_users_path - end if can?(:read, User) + end if can?(:read, University::Person) || can?(:read, University::Organization) || can?(:read, User) end end diff --git a/config/navigation/admin_university_navigation.rb b/config/navigation/admin_university_navigation.rb index 59186e1615..f8a9216239 100644 --- a/config/navigation/admin_university_navigation.rb +++ b/config/navigation/admin_university_navigation.rb @@ -45,11 +45,12 @@ def load_realm(realm, menu) secondary.item :administration_statistics, 'Statistiques', nil end end + + if feature_directory? + primary.item :directory, t('university.description.title'), admin_university_root_path, { image: 'admin/university-thumb.jpg' } do |secondary| + load_realm University, secondary + end + end - primary.item :directory, t('university.description.title'), admin_university_root_path, { image: 'admin/university-thumb.jpg' } do |secondary| - secondary.item :directory_persons, University::Person.model_name.human(count: 2), admin_university_people_path - secondary.item :directory_organizations, University::Organization.model_name.human(count: 2), admin_university_organizations_path - secondary.item :directory_users, User.model_name.human(count: 2), admin_users_path - end if can?(:read, User) end end From 79354af8133acc6cf9da4e1ac348c8caa351d6a6 Mon Sep 17 00:00:00 2001 From: pabois Date: Mon, 22 Jun 2026 14:35:16 +0200 Subject: [PATCH 2/2] adjust --- app/models/ability/alumni_manager.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/models/ability/alumni_manager.rb b/app/models/ability/alumni_manager.rb index 5ae89b19b9..b318050c33 100644 --- a/app/models/ability/alumni_manager.rb +++ b/app/models/ability/alumni_manager.rb @@ -9,6 +9,9 @@ def initialize(user) can :manage, University::Person::Involvement, university_id: @user.university_id can :manage, University::Person::Alumnus can :manage, Import, university_id: @user.university_id + can :manage, Education::Program, university_id: @user.university_id + can :manage, Education::Program::Category, university_id: @user.university_id + can :manage, Education::School, university_id: @user.university_id can :manage, Education::AcademicYear, university_id: @user.university_id can :manage, Education::Cohort, university_id: @user.university_id end @@ -18,6 +21,8 @@ def initialize(user) def manage_blocks can :manage, Communication::Block, university_id: @user.university_id, about_type: 'University::Person::Localization', about_id: University::Person::Localization.where(university_id: @user.university_id).pluck(:id) can :manage, Communication::Block, university_id: @user.university_id, about_type: 'University::Person::Category::Localization', about_id: University::Person::Category::Localization.where(university_id: @user.university_id).pluck(:id) + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Education::Program::Localization', about_id: Education::Program::Localization.where(university_id: @user.university_id).pluck(:id) + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Education::Program::Category::Localization', about_id: Education::Program::Category::Localization.where(university_id: @user.university_id).pluck(:id) can :create, Communication::Block end