Sha256: e29230fa759f40f51c9c9676f4b3b0bcb13f2745592968c8dbaaa46e7fe515dc

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

require 'ditty/models/base'
require 'ditty/models/user'
require 'ditty/models/role'

module ProxES
  class Permission < ::Sequel::Model
    include ::Ditty::Base

    many_to_one :role, class: ::Ditty::Role
    many_to_one :user, class: ::Ditty::User

    dataset_module do
      def for_user(a_user, action)
        where(verb: action).where { Sequel.|({ role: a_user.roles }, { user_id: a_user.id }) }
      end
    end

    def validate
      validates_presence %i[verb pattern]
      validates_presence :role_id unless user_id
      validates_presence :user_id unless role_id
      validates_includes self.class.verbs, :verb
    end

    class << self
      def verbs
        %w[GET POST PUT DELETE HEAD OPTIONS TRACE INDEX]
      end

      def from_audit_log(audit_log)
        match = audit_log.details.match(/^(\w)+ (\S+)/)
        {
          verb: match[1],
          path: match[2]
        }
      end
    end
  end
end

module Ditty
  class User < ::Sequel::Model
    one_to_many :permissions, class: ::ProxES::Permission
  end
end

module Ditty
  class Role < ::Sequel::Model
    one_to_many :permissions, class: ::ProxES::Permission
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
proxes-0.9.7 lib/proxes/models/permission.rb