Class: VoluntaryScholarship::Ability

Inherits:
Object
  • Object
show all
Defined in:
lib/voluntary_scholarship/ability.rb

Class Method Summary collapse

Class Method Details

.after_initializeObject



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/voluntary_scholarship/ability.rb', line 3

def self.after_initialize
  Proc.new do |ability, user, options|
    ability.can :read, [
      Scholarship::Team, Scholarship::TeamMembership, Scholarship::Program, Scholarship::Iteration, Scholarship::IterationParticipation
    ]
    
    if user.present?
      ability.can(:restful_actions, Scholarship::Team) {|team| team.new_record? || user.is_leader_of_scholarship_team?(team) }
      
      ability.can(:restful_actions, Scholarship::TeamMembership) do |membership| 
        membership.new_record? || membership.user_id == user.id || user.is_leader_of_scholarship_team?(membership.team)
      end
      
      ability.can([:with_state] + Scholarship::TeamMembership::EVENTS, Scholarship::TeamMembership) do |membership|
        user.is_leader_of_scholarship_team?(membership.team)
      end
     
      ability.can(:restful_actions, Scholarship::IterationParticipation) do |participation| 
        participation.new_record? || participation.user_id == user.id || user.id == participation.iteration.program.organization.user_id
      end
      
      ability.can([:with_state] + Scholarship::IterationParticipation::EVENTS, Scholarship::IterationParticipation) do |participation|
        user.id == participation.iteration.program.organization.user_id
      end
      
      ability.can(:restful_actions, Scholarship::Program) {|program| program.organization.blank? || program.organization.user_id == user.id }
      ability.can(:restful_actions, Scholarship::Iteration) {|iteration| iteration.program.blank? || iteration.program.organization.user_id == user.id }
    end
  end
end