add get_service_objects_by_user and get_tenant_objects_by_user, make cord admins check users privileges
diff --git a/xos/core/models/service.py b/xos/core/models/service.py
index 2067a39..54160aa 100644
--- a/xos/core/models/service.py
+++ b/xos/core/models/service.py
@@ -64,6 +64,18 @@
def get_service_objects(cls):
return cls.objects.filter(kind = cls.KIND)
+ @classmethod
+ def get_service_objects_by_user(cls, user):
+ return cls.select_by_user(user).filter(kind = cls.KIND)
+
+ @classmethod
+ def select_by_user(cls, user):
+ if user.is_admin:
+ return cls.objects.all()
+ else:
+ service_ids = [sp.slice.id for sp in ServicePrivilege.objects.filter(user=user)]
+ return cls.objects.filter(id__in=service_ids)
+
def __unicode__(self): return u'%s' % (self.name)
def can_update(self, user):
@@ -178,12 +190,12 @@
raise PermissionDenied, "Cannot modify permission(s) of a disabled service"
super(ServicePrivilege, self).delete(*args, **kwds)
- @staticmethod
- def select_by_user(user):
+ @classmethod
+ def select_by_user(cls, user):
if user.is_admin:
- qs = ServicePrivilege.objects.all()
+ qs = cls.objects.all()
else:
- qs = SitePrivilege.objects.filter(user=user)
+ qs = cls.objects.filter(user=user)
return qs
class TenantRoot(PlCoreBase, AttributeMixin):
@@ -226,6 +238,18 @@
def get_tenant_objects(cls):
return cls.objects.filter(kind = cls.KIND)
+ @classmethod
+ def get_tenant_objects_by_user(cls, user):
+ return cls.select_by_user(user).filter(kind = cls.KIND)
+
+ @classmethod
+ def select_by_user(cls, user):
+ if user.is_admin:
+ return cls.objects.all()
+ else:
+ tr_ids = [trp.tenant_root.id for trp in TenantRootPrivilege.objects.filter(user=user)]
+ return cls.objects.filter(id__in=tr_ids)
+
class Tenant(PlCoreBase, AttributeMixin):
""" A tenant is a relationship between two entities, a subscriber and a
provider. This object represents an edge.
@@ -272,6 +296,10 @@
return cls.objects.filter(kind = cls.KIND)
@classmethod
+ def get_tenant_objects_by_user(cls, user):
+ return cls.select_by_user(user).filter(kind = cls.KIND)
+
+ @classmethod
def get_deleted_tenant_objects(cls):
return cls.deleted_objects.filter(kind = cls.KIND)
@@ -359,11 +387,11 @@
def can_update(self, user):
return user.can_update_tenant_root_privilege(self)
- @staticmethod
- def select_by_user(user):
+ @classmethod
+ def select_by_user(cls, user):
if user.is_admin:
- qs = TenantRootPrivilege.objects.all()
+ qs = cls.objects.all()
else:
- qs = TenantRootPrivilege.objects.filter(user=user)
+ qs = cls.objects.filter(user=user)
return qs