api: Let admin users delete logs.
[arvados.git] / services / api / app / models / log.rb
1 class Log < ArvadosModel
2   include AssignUuid
3   include KindAndEtag
4   include CommonApiTemplate
5   serialize :properties, Hash
6   before_validation :set_default_event_at
7   before_save { self.owner_uuid = self.system_user_uuid }
8   attr_accessor :object
9
10   api_accessible :user, extend: :common do |t|
11     t.add :object_kind
12     t.add :object_uuid
13     t.add :object, :if => :object
14     t.add :event_at
15     t.add :event_type
16     t.add :summary
17     t.add :properties
18   end
19
20   def self.start_from(thing, event_type)
21     self.new do |log|
22       log.event_type = event_type
23       log.properties = {
24         'old_etag' => nil,
25         'old_attributes' => nil,
26       }
27       log.seed_basics_from thing
28     end
29   end
30
31   def update_to(thing)
32     self.seed_basics_from thing
33     self.properties["new_etag"] = thing.andand.etag
34     self.properties["new_attributes"] = thing.andand.attributes
35     case self.event_type
36     when "create"
37       self.event_at = thing.created_at
38     when "update"
39       self.event_at = thing.modified_at
40     when "destroy"
41       self.event_at = Time.now
42     end
43   end
44
45   def seed_basics_from(thing)
46     if not thing.nil?
47       self.object_kind ||= thing.kind
48       self.object_uuid ||= thing.uuid
49       self.summary ||= "#{self.event_type} of #{thing.uuid}"
50     end
51   end
52
53   protected
54
55   def permission_to_create
56     true
57   end
58
59   def permission_to_update
60     current_user.andand.is_admin
61   end
62
63   alias_method :permission_to_delete, :permission_to_update
64
65   def set_default_event_at
66     self.event_at ||= Time.now
67   end
68 end