module DataMapper
module Is
module Accessible
def is_accessible
include InstanceMethods
property :created_id, Integer
belongs_to :created_by, :class_name => "User", :child_key => [:created_id]
has n, :accessors, :through => Resource, :class_name => "User"
attr_accessor :accessor_ids
attr_accessor :current_user
before :create, :init_accessors
before :save, :add_accessors
end
module InstanceMethods
def viewable?(user = nil)
return false if accessors.empty?
user ||= current_user
accessors.include?(user)
end
def init_accessors
unless @current_user.nil?
self.created_by = @current_user
self.accessors << @current_user
end
end
def add_accessors
unless self.accessor_ids.nil?
self.accessor_ids.split(',').each{|user_id| accessors << User[user_id]}
end
end
end
end
end
end
DataMapper::Resource::ClassMethods.send(:include, DataMapper::Is::Accessible)