Allow the track organizer to manage events
He/She can manage the events of his/her tracks and their commercials
This commit is contained in:
parent
a87c6e55f7
commit
af7efdb6fe
4 changed files with 34 additions and 9 deletions
|
|
@ -4,6 +4,10 @@ module Admin
|
|||
load_and_authorize_resource :program, through: :conference, singleton: true
|
||||
load_and_authorize_resource :event, through: :program
|
||||
load_and_authorize_resource :events_registration, only: :toggle_attendance
|
||||
# For some reason this doesn't work, so a workaround is used
|
||||
# load_and_authorize_resource :track, through: :program, only: [:index, :show, :edit]
|
||||
|
||||
before_action :get_tracks, only: [:index, :show, :edit]
|
||||
|
||||
# FIXME: The timezome should only be applied on output, otherwise
|
||||
# you get lost in timezone conversions...
|
||||
|
|
@ -14,7 +18,6 @@ module Admin
|
|||
end
|
||||
|
||||
def index
|
||||
@tracks = @program.tracks.confirmed.cfp_active
|
||||
@difficulty_levels = @program.difficulty_levels
|
||||
@event_types = @program.event_types
|
||||
@tracks_distribution_confirmed = @conference.tracks_distribution(:confirmed)
|
||||
|
|
@ -40,7 +43,6 @@ module Admin
|
|||
end
|
||||
|
||||
def show
|
||||
@tracks = @program.tracks.confirmed.cfp_active
|
||||
@event_types = @program.event_types
|
||||
@comments = @event.root_comments
|
||||
@comment_count = @event.comment_threads.count
|
||||
|
|
@ -55,7 +57,6 @@ module Admin
|
|||
|
||||
def edit
|
||||
@event_types = @program.event_types
|
||||
@tracks = @program.tracks.confirmed.cfp_active
|
||||
@comments = @event.root_comments
|
||||
@comment_count = @event.comment_threads.count
|
||||
@user = @event.submitter
|
||||
|
|
@ -195,5 +196,9 @@ module Admin
|
|||
return redirect_back_or_to(admin_conference_program_events_path(conference_id: @conference.short_title)) && return
|
||||
end
|
||||
end
|
||||
|
||||
def get_tracks
|
||||
@tracks = Track.accessible_by(current_ability).where(program: @program).confirmed.cfp_active
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -298,5 +298,14 @@ class AdminAbility
|
|||
can :toggle_user, Role do |role|
|
||||
role.resource_type == 'Track' && track_ids_for_track_organizer.include?(role.resource_id)
|
||||
end
|
||||
|
||||
# Show Events in the admin sidebar
|
||||
can :update, Event do |event|
|
||||
event.new_record? && conf_ids_for_track_organizer.include?(event.program.conference_id)
|
||||
end
|
||||
|
||||
can :manage, Event, track_id: track_ids_for_track_organizer
|
||||
can :manage, Commercial, commercialable_type: 'Event',
|
||||
commercialable_id: Event.where(track_id: track_ids_for_track_organizer).pluck(:id)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ feature 'Has correct abilities' do
|
|||
|
||||
let(:organization) { create(:organization) }
|
||||
let(:conference) { create(:full_conference, organization: organization) }
|
||||
let(:self_organized_track) { create(:track, :self_organized, program: conference.program) }
|
||||
let(:self_organized_track) { create(:track, :self_organized, program: conference.program, state: 'confirmed', cfp_active: true) }
|
||||
let(:role_track_organizer) { Role.where(name: 'track_organizer', resource: self_organized_track).first_or_create }
|
||||
let(:user_track_organizer) { create(:user, role_ids: [role_track_organizer.id]) }
|
||||
|
||||
|
|
@ -28,12 +28,12 @@ feature 'Has correct abilities' do
|
|||
expect(page).to_not have_link('Lodgings', href: "/admin/conferences/#{conference.short_title}/lodgings")
|
||||
expect(page).to have_link('Program', href: "/admin/conferences/#{conference.short_title}/program")
|
||||
expect(page).to_not have_link('Call for Papers', href: "/admin/conferences/#{conference.short_title}/program/cfps")
|
||||
expect(page).to_not have_link('Events', href: "/admin/conferences/#{conference.short_title}/program/events")
|
||||
expect(page).to have_link('Events', href: "/admin/conferences/#{conference.short_title}/program/events")
|
||||
expect(page).to have_link('Tracks', href: "/admin/conferences/#{conference.short_title}/program/tracks")
|
||||
expect(page).to_not have_link('Event Types', href: "/admin/conferences/#{conference.short_title}/program/event_types")
|
||||
expect(page).to_not have_link('Difficulty Levels', href: "/admin/conferences/#{conference.short_title}/program/difficulty_levels")
|
||||
expect(page).to_not have_link('Schedules', href: "/admin/conferences/#{conference.short_title}/schedules")
|
||||
expect(page).to_not have_link('Reports', href: "/admin/conferences/#{conference.short_title}/program/reports")
|
||||
expect(page).to have_link('Reports', href: "/admin/conferences/#{conference.short_title}/program/reports")
|
||||
expect(page).to_not have_link('Registrations', href: "/admin/conferences/#{conference.short_title}/registrations")
|
||||
expect(page).to_not have_link('Registration Period', href: "/admin/conferences/#{conference.short_title}/registration_period")
|
||||
expect(page).to_not have_link('Questions', href: "/admin/conferences/#{conference.short_title}/questions")
|
||||
|
|
@ -101,12 +101,16 @@ feature 'Has correct abilities' do
|
|||
expect(current_path).to eq root_path
|
||||
|
||||
visit admin_conference_program_events_path(conference.short_title)
|
||||
expect(current_path).to eq root_path
|
||||
expect(current_path).to eq admin_conference_program_events_path(conference.short_title)
|
||||
|
||||
create(:event, program: conference.program)
|
||||
visit edit_admin_conference_program_event_path(conference.short_title, conference.program.events.first)
|
||||
expect(current_path).to eq root_path
|
||||
|
||||
self_organized_track_event = create(:event, program: conference.program, track: self_organized_track)
|
||||
visit edit_admin_conference_program_event_path(conference.short_title, self_organized_track_event)
|
||||
expect(current_path).to eq(edit_admin_conference_program_event_path(conference.short_title, self_organized_track_event))
|
||||
|
||||
visit admin_conference_program_event_types_path(conference.short_title)
|
||||
expect(current_path).to eq root_path
|
||||
|
||||
|
|
@ -219,7 +223,7 @@ feature 'Has correct abilities' do
|
|||
expect(current_path).to eq admin_conference_program_track_path(conference.short_title, self_organized_track)
|
||||
|
||||
visit edit_admin_conference_program_track_path(conference.short_title, self_organized_track)
|
||||
expect(current_path).to eq edit_admin_conference_program_track_path(conference.short_title, self_organized_track)
|
||||
expect(current_path).to eq root_path
|
||||
|
||||
visit admin_conference_roles_path(conference.short_title)
|
||||
expect(current_path).to eq admin_conference_roles_path(conference.short_title)
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ describe 'User with admin role' do
|
|||
let!(:my_event_schedule) { create(:event_schedule, schedule: my_schedule) }
|
||||
let!(:other_event_schedule) { create(:event_schedule, schedule: other_schedule) }
|
||||
|
||||
let!(:my_self_organized_track) { create(:track, :self_organized, program: my_conference.program, state: 'confirmed') }
|
||||
let!(:my_self_organized_track) { create(:track, :self_organized, program: my_conference.program, state: 'confirmed', cfp_active: true) }
|
||||
|
||||
context 'user #is_admin?' do
|
||||
let(:venue) { my_conference.venue }
|
||||
|
|
@ -459,6 +459,9 @@ describe 'User with admin role' do
|
|||
let(:role) { Role.where(name: 'track_organizer', resource: my_self_organized_track).first_or_create }
|
||||
let(:user) { create(:user, role_ids: [role.id]) }
|
||||
let(:new_track) { build(:track, program: my_conference.program) }
|
||||
let(:new_event) { build(:event, program: my_conference.program) }
|
||||
let(:my_self_organized_track_event) { create(:event, program: my_conference.program, track: my_self_organized_track) }
|
||||
let(:my_self_organized_track_event_commercial) { create(:commercial, commercialable: my_self_organized_track_event) }
|
||||
|
||||
it{ should_not be_able_to(:new, Conference.new) }
|
||||
it{ should_not be_able_to(:create, Conference.new) }
|
||||
|
|
@ -525,6 +528,10 @@ describe 'User with admin role' do
|
|||
it{ should_not be_able_to(:assign_org_admins, organization) }
|
||||
it{ should_not be_able_to(:unassign_org_admins, organization) }
|
||||
|
||||
it{ should be_able_to(:update, new_event) }
|
||||
it{ should be_able_to(:manage, my_self_organized_track_event) }
|
||||
it{ should be_able_to(:manage, my_self_organized_track_event_commercial) }
|
||||
|
||||
it_behaves_like 'user with any role'
|
||||
it_behaves_like 'user with non-organizer role', 'track_organizer'
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue