Sha256: a8f9266b677cf476ef9a48676f30f97ed005a0460cd7dcf6662b51e9b858766f

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

require 'adeia/database'
require 'adeia/exceptions'

module Adeia

  class Authorization < Database

    def authorize!
      @rights = token_rights(right_name)
      raise LoginRequired if @rights.empty? && @user.nil?
      @rights.push(send("#{right_name}_rights")) if @user
      raise AccessDenied unless authorize?
    end

    def can?
      @rights = token_rights.push(send("#{right_name}_rights"))
      authorize?
    end

    private

    def authorize?
      all_entries? || on_ownerships? || on_entry?
    end

    def all_entries?
      @rights.any? { |r| r.permission_type == "all_entries" }
    end

    def on_ownerships?
      @rights.any? { |r| r.permission_type == "on_ownerships" } && @user && @resource.try(:user) == @user
    end

    def on_entry?
      @rights.pluck(:resource_id).compact.include? @resource.try(:id)
    end

    def right_names
      {read: [:index, :show], create: [:new, :create], update: [:edit, :update], destroy: [:destroy]} 
    end

    def right_name
      right_names.select { |k, v| v.include? @action.to_sym }.keys[0] || :action
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
adeia-0.1.0 lib/adeia/authorization.rb