added rbac for viewing objects
[plstackapi.git] / planetstack / core / models / reservation.py
index e445228..e89b4c8 100644 (file)
@@ -19,6 +19,22 @@ class Reservation(PlCoreBase):
     def endTime(self):
         return self.startTime + datetime.timedelta(hours=self.duration)
 
+    def can_update(self, user):
+        return self.slice.can_update(user)
+
+    def save_by_user(self, user, *args, **kwds):
+        if self.can_update(user):
+            super(Reservation, self).save(*args, **kwds)
+
+    @staticmethod
+    def select_by_user(user):
+        if user.is_admin:
+            qs = Reservation.objects.all()
+        else:
+            slice_ids = [s.id for s in Slice.select_by_user(user)]
+            qs = Reservation.objects.filter(id__in=slice_ids)
+        return qs
+
 class ReservedResource(PlCoreBase):
     sliver = models.ForeignKey(Sliver, related_name="reservedResourrces")
     resource = models.ForeignKey(ServiceResource, related_name="reservedResources")
@@ -30,6 +46,20 @@ class ReservedResource(PlCoreBase):
 
     def __unicode__(self):  return u'%d %s on %s' % (self.quantity, self.resource, self.sliver)
 
+    def can_update(self, user):
+        return self.sliver.slice.can_update(user)
+
+    def save_by_user(self, user, *args, **kwds):
+        if self.can_update(user):
+            super(ReservedResource, self).save(*args, **kwds)
 
+    @staticmethod
+    def select_by_user(user):
+        if user.is_admin:
+            qs = ReservedResource.objects.all()
+        else:
+            sliver_ids = [s.id for s in Sliver.select_by_user(user)]
+            qs = ReservedResource.objects.filter(id__in=sliver_ids)
+        return qs