class ActionPermission::Dispatch

Attributes

membership[RW]
permissions[RW]

Public Class Methods

new(membership) click to toggle source
# File lib/action_permission/dispatch.rb, line 9
def initialize(membership)
  @membership = membership
  @permissions = HashWithIndifferentAccess.new
end

Public Instance Methods

allow?(controller, action, resource = nil) click to toggle source
# File lib/action_permission/dispatch.rb, line 14
def allow?(controller, action, resource = nil)
  current_permission = load_permission controller

  if resource
    current_permission.allow?(action, resource)
  else !resource
    current_permission.allow?(action)
  end
end
allow_param?(resource, attribute) click to toggle source
# File lib/action_permission/dispatch.rb, line 37
def allow_param?(resource, attribute)
  current_permission = load_permission resource.to_s.pluralize

  if current_permission && current_permission.allowed_params
    current_permission.allowed_params.include? attribute
  else
    false
  end
end
allowed_params_for(resource, params, controller=nil) click to toggle source

‘book/review’, params #=> controller == ‘books/reviews’ ‘book/review’, params, ‘reviews’ #=> controller == ‘reviews’

# File lib/action_permission/dispatch.rb, line 26
def allowed_params_for(resource, params, controller=nil)
  controller  = set_controller(resource, controller)
  resource    = set_resource(resource)

  current_permission = load_permission(controller)

  if current_permission && current_permission.allowed_params
    params.require(resource).permit *current_permission.allowed_params
  end
end

Private Instance Methods

get_class_name(controller) click to toggle source
# File lib/action_permission/dispatch.rb, line 85
def get_class_name(controller)
  controller = controller.to_s
  return (controller.pluralize + "_permissions").classify.constantize
end
load_permission(controller) click to toggle source
# File lib/action_permission/dispatch.rb, line 79
def load_permission(controller)
  klass = get_class_name(controller)
  # grab the permissions for this controller from cache or register it if missing
  @permissions[controller] ||= register_permission(controller, klass)
end
register_permission(controller, klass) click to toggle source
# File lib/action_permission/dispatch.rb, line 90
def register_permission(controller, klass)
  @permissions[controller] = klass.new(@membership)
end
set_controller(resource, controller) click to toggle source
# File lib/action_permission/dispatch.rb, line 49
def set_controller(resource, controller)
  if controller
    case controller
    when String, Symbol
      controller.to_s.pluralize
    else
      (controller.is_a?(Class) ? controller : controller.class).
        name.underscore.gsub('_controller', '')
    end
  else
    case resource
    when String, Symbol
      resource.to_s
    else
      (resource.is_a?(Class) ? resource : resource.class).
        name.underscore
    end.
    split('/').map(&:pluralize).join('/')
  end
end
set_resource(resource) click to toggle source
# File lib/action_permission/dispatch.rb, line 70
def set_resource(resource)
  case resource
  when String, Symbol
    resource.to_s.parameterize("_")
  else
    (resource.is_a?(Class) ? resource : resource.class).model_name.param_key
  end
end