module LoginSystem::ClassMethods

def controller_permissions

def controller_permissions
  @controller_permissions ||= Hash.new { |h,k| h[k.to_s.intern] = Hash.new }
end

def login_required

def login_required
  unless login_required?
    prepend_before_action :authenticate, :authorize
  end
end

def login_required?

def login_required?
  filter_chain.any? {|f| f.method == :authenticate || f.method == :authorize }
end

def no_login_required

def no_login_required
  skip_before_action :authenticate
  skip_before_action :authorize
  # puts _process_action_callbacks.map(&:filter)
end

def only_allow_access_to(*args)

def only_allow_access_to(*args)
  options = {}
  options = args.pop.dup if args.last.kind_of?(Hash)
  options.symbolize_keys!
  actions = args.map { |a| a.to_s.intern }
  actions.each do |action|
    controller_permissions[action] = options
  end
end

def user_has_access_to_action?(user, action, instance=new)

def user_has_access_to_action?(user, action, instance=new)
  permissions = controller_permissions[action.to_s.intern]
  case
  when allowed_roles = permissions[:when]
    allowed_roles = [allowed_roles].flatten
    user.present? ? allowed_roles.any? { |role| user.has_role?(role) } : false
  when condition_method = permissions[:if]
    instance.send(condition_method)
  else
    true
  end
end