diff options
author | amcrn <amcreynolds@ebaysf.com> | 2014-03-14 13:22:02 -0700 |
---|---|---|
committer | amcrn <amcreynolds@ebaysf.com> | 2014-03-14 13:22:02 -0700 |
commit | 63d62f084e3e54d7831c728ca40de4ce94004315 (patch) | |
tree | fca2f4823d95c32d3e517f765a884234eaf22d1c /trove/datastore | |
parent | a767623967626e520e9dbafc219e345aa82a193c (diff) | |
download | trove-63d62f084e3e54d7831c728ca40de4ce94004315.tar.gz |
Hide Datastores In List With No Active Versions
in a datastore-list operation, for non-admin, filters out
datastores that either have no versions or have no active
versions for non-admin users. admins continue to see all
datastores, active or inactive, in a datastore-list
operation.
Change-Id: Iccaf9ae59469fd0f4cb346ee258d3132eed83660
Co-Authored-By: Andrey Shestakov <ashestakov@mirantis.com>
Closes-Bug: #1290617
Diffstat (limited to 'trove/datastore')
-rw-r--r-- | trove/datastore/models.py | 10 | ||||
-rw-r--r-- | trove/datastore/service.py | 6 |
2 files changed, 12 insertions, 4 deletions
diff --git a/trove/datastore/models.py b/trove/datastore/models.py index 5cf9c029..93b0cfee 100644 --- a/trove/datastore/models.py +++ b/trove/datastore/models.py @@ -81,8 +81,12 @@ class Datastores(object): self.db_info = db_info @classmethod - def load(cls): - return cls(DBDatastore.find_all()) + def load(cls, only_active=True): + datastores = DBDatastore.find_all() + if only_active: + datastores = datastores.join(DBDatastoreVersion).filter( + DBDatastoreVersion.active == 1) + return cls(datastores) def __iter__(self): for item in self.db_info: @@ -137,7 +141,7 @@ class DatastoreVersion(object): @property def active(self): - return self.db_info.active + return (True if self.db_info.active else False) @property def manager(self): diff --git a/trove/datastore/service.py b/trove/datastore/service.py index d2f0c0b3..d9acb1f8 100644 --- a/trove/datastore/service.py +++ b/trove/datastore/service.py @@ -28,7 +28,11 @@ class DatastoreController(wsgi.Controller): DatastoreView(datastore, req).data(), 200) def index(self, req, tenant_id): - datastores = models.Datastores.load() + context = req.environ[wsgi.CONTEXT_KEY] + only_active = True + if context.is_admin: + only_active = False + datastores = models.Datastores.load(only_active) return wsgi.Result(views. DatastoresView(datastores, req).data(), 200) |