Add Admin/Nodes page
[arvados.git] / apps / workbench / app / models / arvados_base.rb
index cb4463a9be36932c8dc306cee7fa0d874c3c4a67..83588f0aa0152341267da8766db19c96c57a6a80 100644 (file)
@@ -25,11 +25,11 @@ class ArvadosBase < ActiveRecord::Base
     @attribute_sortkey ||= {
       'id' => nil,
       'uuid' => '000',
-      'owner' => '001',
+      'owner_uuid' => '001',
       'created_at' => '002',
       'modified_at' => '003',
-      'modified_by_user' => '004',
-      'modified_by_client' => '005',
+      'modified_by_user_uuid' => '004',
+      'modified_by_client_uuid' => '005',
       'name' => '050',
       'tail_kind' => '100',
       'tail_uuid' => '100',
@@ -73,6 +73,9 @@ class ArvadosBase < ActiveRecord::Base
     end
     new.private_reload(uuid)
   end
+  def self.order(*args)
+    ArvadosResourceList.new(self).order(*args)
+  end
   def self.where(*args)
     ArvadosResourceList.new(self).where(*args)
   end
@@ -106,10 +109,12 @@ class ArvadosBase < ActiveRecord::Base
     @kind = resp[:kind]
 
     # these attrs can be modified by "save" -- we should update our copies
-    %w(uuid owner created_at
-       modified_at modified_by_user modified_by_client
+    %w(uuid owner_uuid created_at
+       modified_at modified_by_user_uuid modified_by_client_uuid
       ).each do |attr|
-      self.send(attr + '=', resp[attr.to_sym])
+      if self.respond_to? "#{attr}=".to_sym
+        self.send(attr + '=', resp[attr.to_sym])
+      end
     end
 
     self
@@ -204,19 +209,25 @@ class ArvadosBase < ActiveRecord::Base
     }
   end
 
+  def self.creatable?
+    current_user
+  end
+
   def editable?
-    (current_user and
+    (current_user and current_user.is_active and
      (current_user.is_admin or
-      current_user.uuid == self.owner))
+      current_user.uuid == self.owner_uuid))
   end
 
   def attribute_editable?(attr)
-    if "created_at modified_at modified_by_user modified_by_client updated_at".index(attr.to_s)
+    if "created_at modified_at modified_by_user_uuid modified_by_client_uuid updated_at".index(attr.to_s)
       false
-    elsif "uuid owner".index(attr.to_s)
-      current_user and current_user.is_admin
+    elsif not (current_user.andand.is_active)
+      false
+    elsif "uuid owner_uuid".index(attr.to_s) or current_user.is_admin
+      current_user.is_admin
     else
-      current_user and current_user.uuid == owner
+      current_user.uuid == self.owner_uuid or current_user.uuid == self.uuid
     end
   end
 
@@ -257,8 +268,11 @@ class ArvadosBase < ActiveRecord::Base
     self
   end
 
-  def current_user
+  def self.current_user
     Thread.current[:user] ||= User.current if Thread.current[:arvados_api_token]
     Thread.current[:user]
   end
+  def current_user
+    self.class.current_user
+  end
 end