Module: Petergate::ActionController::Base
- Included in:
- ActionController::Base
- Defined in:
- lib/petergate/action_controller/base.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- ALLRESTDEP =
[:show, :index, :new, :edit, :update, :create, :destroy]
Class Method Summary collapse
Instance Method Summary collapse
- #custom_message ⇒ Object
- #forbidden!(msg = nil) ⇒ Object
- #logged_in?(*roles) ⇒ Boolean
- #parse_permission_rules(rules) ⇒ Object
- #permissions(rules = {all: [:index, :show], customer: [], wiring: []}) ⇒ Object
- #unauthorized! ⇒ Object
- #user_logged_in? ⇒ Boolean
Class Method Details
.included(base) ⇒ Object
64 65 66 67 |
# File 'lib/petergate/action_controller/base.rb', line 64 def self.included(base) base.extend(ClassMethods) base.helper_method :logged_in?, :forbidden!, :unauthorized! end |
Instance Method Details
#custom_message ⇒ Object
105 106 107 |
# File 'lib/petergate/action_controller/base.rb', line 105 def defined?(self.class.) ? self.class. : 'Permission Denied' end |
#forbidden!(msg = nil) ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/petergate/action_controller/base.rb', line 120 def forbidden!(msg = nil) respond_to do |format| format.any(:js, :json, :xml) do head(:forbidden) end format.html do destination = current_user.present? ? request.headers['Referrer'] || after_sign_in_path_for(current_user) : root_path redirect_to destination, notice: (msg || request.headers['msg'] || ) end end end |
#logged_in?(*roles) ⇒ Boolean
97 98 99 |
# File 'lib/petergate/action_controller/base.rb', line 97 def logged_in?(*roles) current_user && current_user.has_roles?(*roles) end |
#parse_permission_rules(rules) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/petergate/action_controller/base.rb', line 69 def (rules) rules = rules.inject({}) do |h, (k, v)| special_values = case v.class.to_s when "Symbol" v == :all ? self.class.all_actions : raise("No action for: #{v}") when "Hash" v[:except].present? ? self.class.except_actions(v[:except]) : raise("Invalid values for except: #{v.values}") when "Array" v else raise("No action for: #{v}") end h.merge({k => special_values}) end # Allows Array's of keys for the same hash. rules = rules.inject({}){|h, (k, v)| k.class == Array ? h.merge(Hash[k.map{|kk| [kk, v]}]) : h.merge(k => v) } end |
#permissions(rules = {all: [:index, :show], customer: [], wiring: []}) ⇒ Object
88 89 90 91 92 93 94 95 |
# File 'lib/petergate/action_controller/base.rb', line 88 def (rules = {all: [:index, :show], customer: [], wiring: []}) rules = (rules) allowances = [rules[:all]] current_user.roles.each do |role| allowances << rules[role] end if user_logged_in? allowances.flatten.compact.include?(action_name.to_sym) end |
#unauthorized! ⇒ Object
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/petergate/action_controller/base.rb', line 109 def respond_to do |format| format.any(:js, :json, :xml) do head(:unauthorized) end format.html do return authenticate_user! end end end |
#user_logged_in? ⇒ Boolean
101 102 103 |
# File 'lib/petergate/action_controller/base.rb', line 101 def user_logged_in? !!current_user end |