class Portier::ApplicationPermission

*************************************************************************************

Control the access for each controller actions

*************************************************************************************

Public Class Methods

action_tree(action) click to toggle source
# File lib/portier/application_permission.rb, line 5
def self.action_tree(action)
  case action.to_s
    when 'index' then [:index, :consult, :default]
    when 'show' then [:show, :consult, :default]
    when 'new' then [:new, :add, :default]
    when 'create' then [:create, :add, :default]
    when 'edit' then [:edit, :modify, :default]
    when 'update' then [:update, :modify, :default]
    when 'destroy' then [:destroy, :default]
    else [action.to_sym, :default]
  end
end

Public Instance Methods

build_permitted_params() click to toggle source
# File lib/portier/application_permission.rb, line 19
def build_permitted_params
  ps = self.respond_to?(:permitted_params) ? permitted_params : []

  begin
    params.require(record_name).permit ps
  rescue
    {}
  end
end
can?(action, record, options={}) click to toggle source
# File lib/portier/application_permission.rb, line 29
def can?(action, record, options={})
  @current_record = record
  @options = options

  granted? action
end
default() click to toggle source
# File lib/portier/application_permission.rb, line 36
def default
  false
end
granted?(action) click to toggle source
# File lib/portier/application_permission.rb, line 40
def granted?(action)
  action_tree(action).each { |act| return self.send(act) if self.respond_to?(act) }
end

Private Instance Methods

action_tree(action) click to toggle source
# File lib/portier/application_permission.rb, line 47
def action_tree(action)
  Portier::ApplicationPermission.action_tree(action)
end
current_record() click to toggle source
# File lib/portier/application_permission.rb, line 51
def current_record
  @current_record = find_record if not @current_record

  @current_record
end
find_record() click to toggle source
# File lib/portier/application_permission.rb, line 57
def find_record
  if params[:id]
    field = model.respond_to?(:default_id) ? model.default_id : :id

    model.find_by Hash[field, params[:id]]
  else
    nil
  end
end
method_missing(*args, &block) click to toggle source
# File lib/portier/application_permission.rb, line 84
def method_missing(*args, &block)
  if args.first == record_name and model_exists?
    current_record
  elsif current_record.class.to_s.downcase == args.first.to_s
    current_record
  else
    raise NoMethodError.new("undefined local variable or method '#{args.first}' for #{self.class}")
  end
end
model() click to toggle source
# File lib/portier/application_permission.rb, line 67
def model
  model_name.camelize.constantize
end
model_exists?() click to toggle source
# File lib/portier/application_permission.rb, line 75
def model_exists?
  defined? model
end
model_name() click to toggle source
# File lib/portier/application_permission.rb, line 71
def model_name
  controller_name.split('/').last.singularize
end
record_name() click to toggle source
# File lib/portier/application_permission.rb, line 79
def record_name
  model_name.to_sym
end