Class: Gaku::Ability

Inherits:
Object
  • Object
show all
Includes:
CanCan::Ability
Defined in:
app/models/gaku/ability.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user) ⇒ Ability

Returns a new instance of Ability.



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/models/gaku/ability.rb', line 25

def initialize(user)
  clear_aliased_actions

  # override cancan default aliasing
  # (we don't want to differentiate between read and index)
  alias_action :edit, to: :update
  alias_action :new,  to: :create
  alias_action :new_action, to: :create
  alias_action :show, to: :read

  user ||= User.new

  if user.role? :admin
    can :manage, :all
  else
    if user.role? :student
      can :index, Gaku::Student
    else
      can :manage, Gaku::Student
      can :manage, Gaku::Address
      can :manage, Gaku::Contact
      can :manage, Gaku::Note
    end
  end

  # include any abilities registered by extensions, etc.
  Ability.abilities.each do |clazz|
    ability = clazz.send(:new, user)
    @rules = rules + ability.send(:rules)
  end
end

Class Method Details

.register_ability(ability) ⇒ Object

Allows us to go beyond the standard cancan initialize method which makes it difficult for engines to modify the default Ability of an app. The ability argument must be a class that includes the CanCan::Ability module. The registered ability should behave properly as a stand-alone class and therefore should be easy to test in isolation.



17
18
19
# File 'app/models/gaku/ability.rb', line 17

def self.register_ability(ability)
  abilities.add ability
end

.remove_ability(ability) ⇒ Object



21
22
23
# File 'app/models/gaku/ability.rb', line 21

def self.remove_ability(ability)
  abilities.delete ability
end