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
|