Class | Membership |
In: |
lib/membership.rb
|
Parent: | Object |
所属関係の変更に応じて GrantOn と Permission の同期を 行うための Observer を実装している。
PRIORITIES | = | [ :PRIORITY_PERSON, :PRIORITY_GROUP, :PRIORITY_ORGANIZATION, :PRIORITY_COMPANY, :PRIORITY_DOMAIN, :PRIORITY_SENTINEL, ].freeze |
# File lib/membership.rb, line 17 17: def initialize(name, priority) 18: @name = name 19: @priority = priority 20: end
# File lib/membership.rb, line 22 22: def after_create(record) 23: after_destroy(record) do |grant_on| 24: Permission.create(:grant_on_id => grant_on.id, 25: :user_id => record.person.user.id, 26: :priority => @priority, 27: :grant_targettable_id => grant_on.grant_targettable_id, 28: :grant_targettable_type => grant_on.grant_targettable_type, 29: :value => grant_on.value, 30: :start => [record.start, grant_on.start].max, 31: :expiry => [record.expiry, grant_on.expiry].min) 32: end 33: end
# File lib/membership.rb, line 37 37: def after_destroy(record) 38: roleable_id = record.__send__ "#{@name}_id" 39: c = {:roleable_id => roleable_id, :roleable_type => @name.to_s.classify} 40: GrantOn.find_with_period(:all, :conditions => c).each do |grant_on| 41: Permission.find_with_period(:all, :conditions => "grant_on_id = '#{grant_on.id}'").each {|x| x.destroy} 42: yield grant_on if block_given? 43: end 44: end