Sha256: 3cc5f55fc90633094336ab474f4e03fc4a92f8bc68185bce68aabf8293263ba5

Contents?: true

Size: 1.18 KB

Versions: 6

Compression:

Stored size: 1.18 KB

Contents

module ActsPermissive
  class Grouping < ActiveRecord::Base

    belongs_to :permission
    belongs_to :permissible, :polymorphic => true

    set_table_name :permissive_groupings

    validates_uniqueness_of :permission_id, :scope => [:permissible_id, :permissible_type]

    scope :by_circle, lambda {|circle|
        joins("inner join permissive_permissions on permissive_permissions.circle_id = #{circle.id}").
        where("permissive_groupings.permission_id = permissive_permissions.id").
        select("DISTINCT permissive_groupings.*")
    }

    scope :by_object, lambda {|obj|
      # using find_by_sql, because we can't figure out how to make it work with joins() and where()
      self.find_by_sql("
        SELECT DISTINCT pg.*
        FROM (
          SELECT circle_id
          FROM permissive_circlings
          WHERE circleable_id = #{obj.id}
          AND circleable_type = '#{obj.class.to_s}') pc
          INNER JOIN permissive_permissions pp
            ON pc.circle_id = pp.circle_id
          INNER JOIN permissive_groupings pg
            ON pg.permission_id = pp.id
      ")
    }

    def self.who_can_see obj
      by_object(obj).map{|u| u.permissible}.compact
    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
acts_permissive-0.3.4 lib/acts_permissive/grouping.rb
acts_permissive-0.3.3 lib/acts_permissive/grouping.rb
acts_permissive-0.3.2 lib/acts_permissive/grouping.rb
acts_permissive-0.3.1 lib/acts_permissive/grouping.rb
acts_permissive-0.3.0 lib/acts_permissive/grouping.rb
acts_permissive-0.2.5 lib/acts_permissive/grouping.rb