module PermissionsSubject

Adds the ability for models to be managed through permissions.

Public Instance Methods

actors() click to toggle source
# File lib/buweb/concerns/permissions_subject.rb, line 45
def actors
  array = []
  self.permissions.order_by(:actor_type.asc).each do |p|
    obj = p.actor_type.constantize.find(p.actor_id)
    array << obj unless obj.nil?
  end
  array
end
authorize(actor, ability) click to toggle source
# File lib/buweb/concerns/permissions_subject.rb, line 68
def authorize(actor, ability)
  self.new_permissions_for(actor, ability).save
end
authorize!(actor, ability) click to toggle source
# File lib/buweb/concerns/permissions_subject.rb, line 64
def authorize!(actor, ability)
  self.new_permissions_for(actor, ability).save
end
has_permission?(actor)
Alias for: permission?
has_permission_to?(ability, actor)
Alias for: permission_to?
new_permissions_for(object, ability = nil) click to toggle source
# File lib/buweb/concerns/permissions_subject.rb, line 84
def new_permissions_for(object, ability = nil)
  self.permissions.new(
    actor_id: object.id,
    actor_type: object.class.to_s,
    ability: ability
  )
end
permission?(actor) click to toggle source
# File lib/buweb/concerns/permissions_subject.rb, line 54
def permission?(actor)
  actors.include?(actor)
end
Also aliased as: has_permission?
permission_to?(ability, actor) click to toggle source
# File lib/buweb/concerns/permissions_subject.rb, line 59
def permission_to?(ability, actor)
  self.permissions.by_actor(actor).where(ability: ability).present?
end
Also aliased as: has_permission_to?
remove_permissions_for(object, ability=nil) click to toggle source

find out if the destroy action works with the current user listed

# File lib/buweb/concerns/permissions_subject.rb, line 93
def remove_permissions_for(object, ability=nil)
  self.permissions.find_by(actor_id: object.id, ability: ability).destroy
end
unauthorize!(actor, ability) click to toggle source
# File lib/buweb/concerns/permissions_subject.rb, line 72
def unauthorize!(actor, ability)
  self.remove_permissions_for(actor, ability)
end
unauthorize_all!(actor) click to toggle source

find out if the destroy action works with the current user listed

# File lib/buweb/concerns/permissions_subject.rb, line 77
def unauthorize_all!(actor)
  self.permissions.where(
    actor_type: actor.class.to_s,
    actor_id: actor.id
  ).destroy_all
end