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..b318050c33 --- /dev/null +++ b/app/models/ability/alumni_manager.rb @@ -0,0 +1,29 @@ +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::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 + + 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 :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 + +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