From 42482bfabc1919a1ab8f7d8ee506d93cf66930c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Andr=C3=A9=20Boissinot?= <pierreandre.boissinot@noesya.coop> Date: Mon, 27 Jan 2025 11:45:43 +0100 Subject: [PATCH] add abilities (#2605) --- app/models/ability/admin.rb | 1 + app/models/ability/program_manager.rb | 31 +++++++++++++++++++++++++++ app/models/ability/website_manager.rb | 23 +++++++++++++++----- 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/app/models/ability/admin.rb b/app/models/ability/admin.rb index 4fed71195..1109f4e0b 100644 --- a/app/models/ability/admin.rb +++ b/app/models/ability/admin.rb @@ -73,6 +73,7 @@ class Ability::Admin < Ability can :manage, Communication::Website::Menu, university_id: @user.university_id can :manage, Communication::Website::Menu::Item, university_id: @user.university_id can :manage, Communication::Website::Page, university_id: @user.university_id + can :manage, Communication::Website::Page::Category, university_id: @user.university_id can :manage, Communication::Website::Post, university_id: @user.university_id end diff --git a/app/models/ability/program_manager.rb b/app/models/ability/program_manager.rb index b3da7db0f..62fdb7264 100644 --- a/app/models/ability/program_manager.rb +++ b/app/models/ability/program_manager.rb @@ -3,13 +3,18 @@ class Ability::ProgramManager < Ability def initialize(user) super can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Agenda::Event::Localization', about_id: managed_event_localization_ids + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Agenda::Category::Localization', about_id: managed_agenda_category_localization_ids can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Post::Localization', about_id: managed_post_localization_ids + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Post::Category::Localization', about_id: managed_post_category_localization_ids can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Education::Program::Localization', about_id: managed_program_localization_ids + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Education::Program::Category::Localization', about_id: managed_program_category_localization_ids can :manage, Communication::Block, university_id: @user.university_id, about_type: 'University::Person::Localization', about_id: managed_person_localization_ids can :create, Communication::Block can :read, Communication::Website, university_id: @user.university_id can :manage, Communication::Website::Agenda::Event, university_id: @user.university_id + can :manage, Communication::Website::Agenda::Category, id: managed_agenda_category_ids can :manage, Communication::Website::Post, university_id: @user.university_id + can :manage, Communication::Website::Post::Category, id: managed_post_category_ids can :manage, Education::Program, id: managed_programs_ids can [:read, :children], Education::Program, university_id: @user.university_id cannot :create, Education::Program @@ -37,6 +42,22 @@ class Ability::ProgramManager < Ability end end + def managed_agenda_category_ids + @managed_agenda_category_ids ||= Communication::Website::Agenda::Category.where(university_id: @user.university_id, program_id: managed_programs_ids).pluck(:id) + end + + def managed_agenda_category_localization_ids + @managed_agenda_category_localization_ids ||= Communication::Website::Agenda::Category::Localization.where(about_id: managed_agenda_category_ids).pluck(:id) + end + + def managed_post_category_ids + @managed_post_category_ids ||= Communication::Website::Post::Category.where(university_id: @user.university_id, program_id: managed_programs_ids).pluck(:id) + end + + def managed_post_category_localization_ids + @managed_post_category_localization_ids ||= Communication::Website::Post::Category::Localization.where(about_id: managed_post_category_ids).pluck(:id) + end + def managed_programs_ids @managed_programs_ids ||= @user.programs_to_manage.pluck(:id) end @@ -45,6 +66,16 @@ class Ability::ProgramManager < Ability @managed_program_localization_ids ||= Education::Program::Localization.where(about_id: managed_program_ids).pluck(:id) end + def managed_program_category_ids + @managed_program_category_ids ||= Education::Program::Category.where(university_id: @user.university_id).pluck(:id) + end + + def managed_program_category_localization_ids + @managed_program_category_localization_ids ||= Education::Program::Category::Localization.where(about_id: managed_program_category_ids).pluck(:id) + end + + + def managed_person_localization_ids @managed_person_localization_ids ||= begin University::Person::Localization diff --git a/app/models/ability/website_manager.rb b/app/models/ability/website_manager.rb index b7db6d5b9..afc26883e 100644 --- a/app/models/ability/website_manager.rb +++ b/app/models/ability/website_manager.rb @@ -7,15 +7,17 @@ class Ability::WebsiteManager < Ability can :manage, Communication::Website::Localization, university_id: @user.university_id, communication_website_id: managed_websites_ids can :manage, Communication::Website::Agenda::Event, university_id: @user.university_id, communication_website_id: managed_websites_ids can :manage, Communication::Website::Agenda::Category, university_id: @user.university_id, communication_website_id: managed_websites_ids - can :manage, Communication::Website::Post::Category, university_id: @user.university_id, communication_website_id: managed_websites_ids can [:read, :update, :reorder], Communication::Website::Menu, university_id: @user.university_id, communication_website_id: managed_websites_ids can :manage, Communication::Website::Menu::Item, university_id: @user.university_id, website_id: managed_websites_ids can :create, Communication::Website::Menu::Item, university_id: @user.university_id can :manage, Communication::Website::Page, university_id: @user.university_id, communication_website_id: managed_websites_ids - can :manage, Communication::Website::Portfolio::Category, university_id: @user.university_id, communication_website_id: managed_websites_ids + can :manage, Communication::Website::Page::Category, university_id: @user.university_id, communication_website_id: managed_websites_ids can :manage, Communication::Website::Portfolio::Project, university_id: @user.university_id, communication_website_id: managed_websites_ids + can :manage, Communication::Website::Portfolio::Category, university_id: @user.university_id, communication_website_id: managed_websites_ids can :manage, Communication::Website::Post, university_id: @user.university_id, communication_website_id: managed_websites_ids + can :manage, Communication::Website::Post::Category, university_id: @user.university_id, communication_website_id: managed_websites_ids can :manage, University::Organization, university_id: @user.university_id + can :manage, University::Organization::Category, university_id: @user.university_id 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 @@ -49,6 +51,14 @@ class Ability::WebsiteManager < Ability end end + def managed_page_category_localization_ids + @managed_page_category_localization_ids ||= begin + Communication::Website::Page::Category::Localization + .where(communication_website_id: managed_websites_ids) + .pluck(:id) + end + end + def managed_portfolio_category_localization_ids @managed_portfolio_category_localization_ids ||= begin Communication::Website::Portfolio::Category::Localization @@ -82,15 +92,18 @@ class Ability::WebsiteManager < Ability end def manage_blocks - can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Agenda::Category::Localization', about_id: managed_agenda_category_localization_ids can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Agenda::Event::Localization', about_id: managed_agenda_event_localization_ids + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Agenda::Category::Localization', about_id: managed_agenda_category_localization_ids can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Page::Localization', about_id: managed_page_localization_ids - can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Portfolio::Category::Localization', about_id: managed_portfolio_category_localization_ids + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Page::Category::Localization', about_id: managed_page_category_localization_ids can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Portfolio::Project::Localization', about_id: managed_portfolio_project_localizations_ids - can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Post::Category::Localization', about_id: managed_post_category_localization_ids + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Portfolio::Category::Localization', about_id: managed_portfolio_category_localization_ids can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Post::Localization', about_id: managed_post_localization_ids + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'Communication::Website::Post::Category::Localization', about_id: managed_post_category_localization_ids can :manage, Communication::Block, university_id: @user.university_id, about_type: 'University::Organization::Localization', about_id: University::Organization::Localization.where(university_id: @user.university_id).pluck(:id) + can :manage, Communication::Block, university_id: @user.university_id, about_type: 'University::Organization::Category::Localization', about_id: University::Organization::Category::Localization.where(university_id: @user.university_id).pluck(:id) 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 -- GitLab