Skip to content
This repository has been archived by the owner on Jul 24, 2020. It is now read-only.

Commit

Permalink
Merge pull request #1402 from YaleSTC/1391_refactor_ability
Browse files Browse the repository at this point in the history
[1391] Refactor ability.rb
  • Loading branch information
orenyk committed Jan 7, 2016
2 parents 513f0f6 + 5b84979 commit 121d025
Showing 1 changed file with 76 additions and 69 deletions.
145 changes: 76 additions & 69 deletions app/models/ability.rb
Original file line number Diff line number Diff line change
@@ -1,75 +1,82 @@
class Ability
include CanCan::Ability

def initialize(user) # rubocop:disable all
if user
case user.view_mode
when 'superuser'
can :manage, :all
when 'admin'
can :manage, :all
cannot :renew, Reservation unless AppConfig.check(:enable_renewals)
cannot :appoint, :superuser
cannot :access, :rails_admin
cannot [:destroy, :update], User, role: 'superuser'
when 'checkout'
can :manage, Reservation
cannot :archive, Reservation
cannot :renew, Reservation unless AppConfig.check(:enable_renewals)
cannot :destroy, Reservation do |r|
!r.checked_out.nil?
end
unless AppConfig.check(:checkout_persons_can_edit)
cannot :update, Reservation
end
can [:read, :update, :find, :autocomplete_user_last_name], User
if AppConfig.check(:enable_new_users)
can [:create, :quick_new, :quick_create], User
end
can :read, EquipmentItem
can :read, EquipmentModel
can :override, :reservation_errors if AppConfig.get(:override_on_create)
can :override, :checkout_errors if AppConfig.get(:override_at_checkout)
can :view_detailed, EquipmentModel
can :hide, Announcement
when 'normal' || 'checkout'
can [:update, :show], User, id: user.id
can :read, EquipmentModel
can [:read, :create], Reservation, reserver_id: user.id
can :destroy, Reservation, reserver_id: user.id, checked_out: nil
if AppConfig.check(:enable_renewals)
can :renew, Reservation, reserver_id: user.id
end
can :update_cart, :all
can :update_index_dates, Reservation
can :view_all_dates, Reservation
can :view_detailed, EquipmentModel
can :hide, Announcement
when 'guest'
# rubocop:disable BlockNesting
if AppConfig.check(:enable_guests)
can :read, EquipmentModel
can :empty_cart, :all
can :update_cart, :all
can :create, User if AppConfig.check(:enable_new_users)
can :hide, Announcement
end
# rubocop:enable BlockNesting
when 'banned'
can :hide, Announcement
# cannot :create, Reservation
end
case user.role
when 'superuser'
can :change, :views
can :view_as, :superuser
when 'admin'
can :change, :views
cannot :view_as, :superuser
end
cannot :change, :views unless %w(admin superuser).include?(user.role)
else
can :create, User
def initialize(user)
@user = user
if user.nil?
guest
return
end

send(user.view_mode.to_sym)
case user.role
when 'superuser'
can :change, :views
can :view_as, :superuser
when 'admin'
can :change, :views
cannot :view_as, :superuser
end
cannot :change, :views unless %w(admin superuser).include?(user.role)
end

def superuser
can :manage, :all
end

def admin
can :manage, :all
cannot :renew, Reservation unless AppConfig.check(:enable_renewals)
cannot :appoint, :superuser
cannot :access, :rails_admin
cannot [:destroy, :update], User, role: 'superuser'
end

def checkout
can :manage, Reservation
cannot :archive, Reservation
cannot :renew, Reservation unless AppConfig.check(:enable_renewals)
cannot :destroy, Reservation do |r|
!r.checked_out.nil?
end
unless AppConfig.check(:checkout_persons_can_edit)
cannot :update, Reservation
end
can [:read, :update, :find, :autocomplete_user_last_name], User
if AppConfig.check(:enable_new_users)
can [:create, :quick_new, :quick_create], User
end
can :read, EquipmentItem
can :override, :reservation_errors if AppConfig.get(:override_on_create)
can :override, :checkout_errors if AppConfig.get(:override_at_checkout)
normal
end

def normal
can [:update, :show], User, id: @user.id
can :read, EquipmentModel
can [:read, :create], Reservation, reserver_id: @user.id
can :destroy, Reservation, reserver_id: @user.id, checked_out: nil
if AppConfig.check(:enable_renewals)
can :renew, Reservation, reserver_id: @user.id
end
can :update_cart, :all
can :update_index_dates, Reservation
can :view_all_dates, Reservation
can :view_detailed, EquipmentModel
can :hide, Announcement
end

def guest
return unless AppConfig.check(:enable_guests)
can :read, EquipmentModel
can :empty_cart, :all
can :update_cart, :all
can :create, User if AppConfig.check(:enable_new_users)
can :hide, Announcement
end

def banned
can :hide, Announcement
end
end

0 comments on commit 121d025

Please sign in to comment.