module Monarchy::ActsAsMember::SupportMethods

Public Instance Methods

include_callbacks() click to toggle source
# File lib/monarchy/acts_as_member.rb, line 37
def include_callbacks
  after_destroy :revoke_access, if: :members_access_revoke?
end
include_relationships() click to toggle source
# File lib/monarchy/acts_as_member.rb, line 47
def include_relationships
  has_many :members_roles, dependent: :destroy, class_name: 'Monarchy::MembersRole'
  has_many :roles, -> { order(level: :desc) }, through: :members_roles, class_name: "::#{Monarchy.role_class}"

  belongs_to :user, class_name: "::#{Monarchy.user_class}"
  belongs_to :hierarchy, class_name: "::#{Monarchy.hierarchy_class}"
end
include_scopes() click to toggle source
# File lib/monarchy/acts_as_member.rb, line 25
def include_scopes
  scope :accessible_for, (lambda do |user|
    Monarchy::Validators.user(user)
    where(hierarchy: Monarchy.hierarchy_class.accessible_for(user))
  end)

  scope :with_access_to, (lambda do |resource|
    Monarchy::Validators.resource(resource)
    where(id: with_ancestors_access(resource).union(with_descendants_access(resource)))
  end)
end
include_validators() click to toggle source
# File lib/monarchy/acts_as_member.rb, line 41
def include_validators
  validates :user_id, uniqueness: { scope: :hierarchy_id }
  validates :user, presence: true
  validate :hierarchy_or_resource
end
with_ancestors_access(resource) click to toggle source
# File lib/monarchy/acts_as_member.rb, line 55
def with_ancestors_access(resource)
  unscoped.where(hierarchy: resource.hierarchy.self_and_ancestors)
          .joins(:roles).where(monarchy_roles: { inherited: true })
end
with_descendants_access(resource) click to toggle source
# File lib/monarchy/acts_as_member.rb, line 60
def with_descendants_access(resource)
  unscoped.where(hierarchy: resource.hierarchy.descendants)
end