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