Adapt ability to allow create a proposal if cfp is open

This is necessary because the manage block does not cover it.
event.users.include?(user) is always false for :new and :create because
the event_users are not saved yet.
Introduced in 3e32c58
This commit is contained in:
Christian Bruckmayer 2016-04-01 15:37:28 -06:00
parent f4d41bd610
commit 08624c5b53
4 changed files with 36 additions and 29 deletions

View file

@ -58,7 +58,7 @@ class Ability
event.new_record?
end
can [:new, :create], Event do |event|
can :new, Event do |event|
event.program.cfp_open? && event.new_record?
end
end
@ -82,14 +82,19 @@ class Ability
can [:create, :destroy], Subscription, user_id: user.id
can :manage, Event do |event|
can [:read, :update, :destroy], Event do |event|
event.users.include?(user)
end
# cannot create an event if program does not have open cfp
cannot [:new, :create], Event do |event|
user_inclusion = event.event_users.map { |event_user| event_user.user.id }.compact.include? user.id
!event.program.cfp_open? || !event.new_record? || !user_inclusion
can [:new], Event do |event|
event.program.cfp_open? && event.new_record?
end
can [:create], Event do |event|
# event.users.include?(user) doesn't work here because the event_user object isn't saved when we call authorize!
# Checks that only the current_user is in event_users
user_inclusion = event.event_users.map { |event_user| event_user.user_id }.uniq - [ user.id ]
user_inclusion.empty? && event.program.cfp_open? && event.new_record?
end
# can manage the commercials of their own events