From 0f91f5904bc388b46ba7e37982a9cdbd60390240 Mon Sep 17 00:00:00 2001 From: Tom Smyth Date: Mon, 18 Sep 2023 08:30:59 -0400 Subject: [PATCH] Split date_loc_invites permission --- app/models/meals/import.rb | 5 +++-- app/policies/meals/meal_policy.rb | 23 ++++++++++++++------ app/views/meals/meals/form/_general.html.erb | 4 ++-- spec/policies/meals/meal_policy_spec.rb | 6 ++--- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/models/meals/import.rb b/app/models/meals/import.rb index 1047ce084..df99b7074 100644 --- a/app/models/meals/import.rb +++ b/app/models/meals/import.rb @@ -9,7 +9,7 @@ class Import < ApplicationRecord BASIC_HEADERS = %i[served_at calendars formula communities action id].freeze REQUIRED_HEADERS = %i[served_at calendars].freeze - DB_ID_REGEX = /\A\d+\z/.freeze + DB_ID_REGEX = /\A\d+\z/ acts_as_tenant :cluster @@ -114,7 +114,8 @@ def assign_defaults_to_new_meal def copy_attribs_to_target_meal attribs = [] - attribs.concat(%i[served_at calendars communities]) if row_policy.change_date_loc_invites? + attribs.concat(%i[served_at calendars]) if row_policy.change_date_loc? + attribs.concat(%i[communities]) if row_policy.change_invites? attribs << :formula if row_policy.change_formula? attribs << :assignments if row_policy.change_workers? attribs.each { |attrib| target_meal.send("#{attrib}=", new_meal.send(attrib)) } diff --git a/app/policies/meals/meal_policy.rb b/app/policies/meals/meal_policy.rb index b1a4bd7dc..5d6c82ce1 100644 --- a/app/policies/meals/meal_policy.rb +++ b/app/policies/meals/meal_policy.rb @@ -2,7 +2,7 @@ module Meals class MealPolicy < ApplicationPolicy - alias meal record + alias_method :meal, :record class Scope < Scope ASSIGNED = "EXISTS (SELECT id FROM meal_assignments @@ -21,7 +21,7 @@ def resolve scope elsif user.active? scope.where("#{ASSIGNED} OR #{INVITED} OR #{SIGNED_UP}", - user.id, user.community_id, user.household_id) + user.id, user.community_id, user.household_id) else scope.where(SIGNED_UP, user.household_id) end @@ -53,7 +53,7 @@ def import? end def update? - change_date_loc_invites? || change_formula? || change_menu? || change_workers? + change_date_loc? || change_invites? || change_formula? || change_menu? || change_workers? end def destroy? @@ -88,7 +88,11 @@ def show_reimbursement_details? active_admin_or?(:meals_coordinator, :biller) || head_cook? end - def change_date_loc_invites? + def change_date_loc? + active_admin_or?(:meals_coordinator) + end + + def change_invites? active_admin_or?(:meals_coordinator) end @@ -129,7 +133,8 @@ def permitted_attributes permitted = [] permitted.concat(worker_attribs) if change_workers? permitted.concat(menu_attribs) if change_menu? - permitted.concat(date_loc_invite_attribs) if change_date_loc_invites? + permitted.concat(date_loc_attribs) if change_date_loc? + permitted.concat(invite_attribs) if change_invites? permitted.concat(signup_attribs) if change_signups? permitted.concat(expense_attribs) if change_expenses? permitted << :formula_id if change_formula? @@ -176,8 +181,12 @@ def head_cook? active? && user == meal.head_cook end - def date_loc_invite_attribs - [:served_at, {community_boxes: [Community.all.map(&:id).map(&:to_s)]}, {calendar_ids: []}] + def date_loc_attribs + [:served_at, {calendar_ids: []}] + end + + def invite_attribs + [{community_boxes: [Community.all.map(&:id).map(&:to_s)]}] end def menu_attribs diff --git a/app/views/meals/meals/form/_general.html.erb b/app/views/meals/meals/form/_general.html.erb index d62e0a0cd..ebd7e0970 100644 --- a/app/views/meals/meals/form/_general.html.erb +++ b/app/views/meals/meals/form/_general.html.erb @@ -1,6 +1,6 @@ <%= meal.form_section(:general, expanded: local_assigns[:expanded]) do %>
- <% if policy(meal).change_date_loc_invites? %> + <% if policy(meal).change_date_loc? %> <%= f.input :served_at, as: :datetime_picker, include_day_of_week: true %> <%= f.input :calendar_ids, collection: @calendar_options, label_method: :name_with_prefix, input_html: {multiple: "multiple"} %> @@ -21,7 +21,7 @@ <% end %> <% if multi_community? %> - <% if policy(meal).change_date_loc_invites? %> + <% if policy(meal).change_invites? %>
"> diff --git a/spec/policies/meals/meal_policy_spec.rb b/spec/policies/meals/meal_policy_spec.rb index cdc058a9c..88907dc0f 100644 --- a/spec/policies/meals/meal_policy_spec.rb +++ b/spec/policies/meals/meal_policy_spec.rb @@ -58,8 +58,8 @@ end end - permissions :new?, :create?, :import?, :change_date_loc_invites?, - :change_workers_without_notification? do + permissions :new?, :create?, :import?, :change_date_loc?, :change_invites?, + :change_workers_without_notification? do it_behaves_like "permits admins or special role but not regular users", :meals_coordinator end @@ -68,7 +68,7 @@ end permissions :change_formula?, :change_menu?, :change_signups?, :change_capacity_close_time?, :change_expenses?, - :close?, :cancel? do + :close?, :cancel? do it_behaves_like "permits admins or special role but not regular users", :meals_coordinator it_behaves_like "forbids if finalized"