Sha256: a0f01c56cf90647b54d8699b7a1dae8aa3abc7a16c391b86905b2d7f7065b44f

Contents?: true

Size: 1.86 KB

Versions: 4

Compression:

Stored size: 1.86 KB

Contents

# frozen_string_literal: true

require "active_support/concern"
require "miau/version"
require "miau/error"
require "miau/storage"
require "miau/run"
require "miau/application_policy"

module Miau
  extend ActiveSupport::Concern

  included do
    if respond_to?(:helper_method)
      helper_method :authorized?
      helper_method :miau_user
    end
  end

  def authorize!(resource = nil, hsh = {})
    @_miau_authorization_performed = true
    return true if authorized?(resource, hsh)

    controller = params[:controller].to_sym
    action = params[:action].to_sym
    PolicyRun.instance.raise_authorize(controller, action)
  end

  def authorized?(resource = nil, hsh = {})
    controller = params[:controller].to_sym
    action = params[:action].to_sym
    policy = PolicyStorage.instance.find_or_create_policy(controller)
    PolicyRun.instance.raise_undef(policy, action) unless policy

    policy.user = miau_user
    policy.resource = resource
    methods = PolicyRun.instance.find_methods(policy, controller, action)
    PolicyRun.instance.raise_undef(policy, action) unless methods

    PolicyRun.instance.runs(policy, methods)
  end

  def authorize_controller!
    controller = params[:controller].to_sym
    action = params[:action].to_sym
    policy = PolicyStorage.instance.find_or_create_policy(controller)
    unless policy
      msg = "missing class #{controller.capitalize}Policy"
      raise NotDefinedError, msg
    end

    policy.user = miau_user
    policy.action = action

    @_miau_authorization_performed = true
    return true if PolicyRun.instance.runs(policy, :controller)

    PolicyRun.instance.raise_authorize policy, action
  end

  def miau_user
    current_user
  end

  def verify_authorized
    raise AuthorizationNotPerformedError unless miau_authorization_performed?
  end

  def miau_authorization_performed?
    !!@_miau_authorization_performed
  end
end

Version data entries

4 entries across 3 versions & 1 rubygems

Version Path
miau-1.1.10 lib/miau.rb
miau-1.1.8 lib/miau.rb
miau-1.1.8 lib/miau.rb.bak
miau-1.1.7 lib/miau.rb