Module: RoleOn::RoleOnControllerMethods

Defined in:
lib/role_on.rb

Instance Method Summary collapse

Instance Method Details

#role_on(role, options = {}) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/role_on.rb', line 3

def role_on(role, options = {})
  before_filter do |c|
    options = c.__send__(:role_on_defaults).merge(options) if (c.methods | c.protected_methods | c.private_methods).include?('role_on_defaults')
    action = c.params[:action].intern
    user_roles = c.__send__(:current_user).roles.map(&:name).map(&:intern)
    restricted_actions = if options.include?(:on)
                           [options[:on]].flatten
                         elsif options.include?(:only)
                           [options[:only]].flatten
                         elsif options.include?(:except)
                           c.class.action_methods.to_a.map(&:intern) - [options[:except]].flatten
                         else
                           c.class.action_methods.to_a.map(&:intern)
                         end
    if restricted_actions.include?(action) && !user_roles.include?(role) && (options.include?(:sa) ? !user_roles.include?(options[:sa]) : false)
      c.__send__(:access_denied)
      false
    else
      true
    end
  end
end