Merge "Allow show public baymodel"

This commit is contained in:
Jenkins 2016-03-22 05:12:59 +00:00 committed by Gerrit Code Review
commit d40d40924e
3 changed files with 25 additions and 2 deletions

View File

@ -293,8 +293,9 @@ class BayModelsController(rest.RestController):
"""
context = pecan.request.context
baymodel = api_utils.get_resource('BayModel', baymodel_ident)
policy.enforce(context, 'baymodel:get', baymodel,
action='baymodel:get')
if not baymodel.public:
policy.enforce(context, 'baymodel:get', baymodel,
action='baymodel:get')
return BayModel.convert_with_links(baymodel)

View File

@ -292,6 +292,8 @@ class Connection(api.Connection):
def get_baymodel_by_id(self, context, baymodel_id):
query = model_query(models.BayModel)
query = self._add_tenant_filters(context, query)
public_q = model_query(models.BayModel).filter_by(public=True)
query = query.union(public_q)
query = query.filter_by(id=baymodel_id)
try:
return query.one()
@ -301,6 +303,8 @@ class Connection(api.Connection):
def get_baymodel_by_uuid(self, context, baymodel_uuid):
query = model_query(models.BayModel)
query = self._add_tenant_filters(context, query)
public_q = model_query(models.BayModel).filter_by(public=True)
query = query.union(public_q)
query = query.filter_by(uuid=baymodel_uuid)
try:
return query.one()
@ -310,6 +314,8 @@ class Connection(api.Connection):
def get_baymodel_by_name(self, context, baymodel_name):
query = model_query(models.BayModel)
query = self._add_tenant_filters(context, query)
public_q = model_query(models.BayModel).filter_by(public=True)
query = query.union(public_q)
query = query.filter_by(name=baymodel_name)
try:
return query.one()

View File

@ -85,11 +85,21 @@ class DbBaymodelTestCase(base.DbTestCase):
baymodel = self.dbapi.get_baymodel_by_id(self.context, bm['id'])
self.assertEqual(bm['uuid'], baymodel.uuid)
def test_get_baymodel_by_id_public(self):
bm = utils.create_test_baymodel(user_id='not_me', public=True)
baymodel = self.dbapi.get_baymodel_by_id(self.context, bm['id'])
self.assertEqual(bm['uuid'], baymodel.uuid)
def test_get_baymodel_by_uuid(self):
bm = utils.create_test_baymodel()
baymodel = self.dbapi.get_baymodel_by_uuid(self.context, bm['uuid'])
self.assertEqual(bm['id'], baymodel.id)
def test_get_baymodel_by_uuid_public(self):
bm = utils.create_test_baymodel(user_id='not_me', public=True)
baymodel = self.dbapi.get_baymodel_by_uuid(self.context, bm['uuid'])
self.assertEqual(bm['id'], baymodel.id)
def test_get_baymodel_that_does_not_exist(self):
self.assertRaises(exception.BayModelNotFound,
self.dbapi.get_baymodel_by_id, self.context, 666)
@ -100,6 +110,12 @@ class DbBaymodelTestCase(base.DbTestCase):
self.assertEqual(bm['id'], res.id)
self.assertEqual(bm['uuid'], res.uuid)
def test_get_baymodel_by_name_public(self):
bm = utils.create_test_baymodel(user_id='not_me', public=True)
res = self.dbapi.get_baymodel_by_name(self.context, bm['name'])
self.assertEqual(bm['id'], res.id)
self.assertEqual(bm['uuid'], res.uuid)
def test_get_baymodel_by_name_multiple_baymodel(self):
utils.create_test_baymodel(
id=1, name='bm',