Treat networks shared by RBAC in same way as shared with all tenants

In patch [1] handle of networks with "shared" flag set to True was
fixed and it is now possible to use "rule:shared" in API policy in
actions related e.g. to ports or subnets.
But network can be shared with some specific tenant only by doing it
with RBAC mechanism and in such case it didn't work with [1] only.
It was like that because context.get_admin_context() was used to get
network so this returned network had got shared=False set even if
request comes from tenant for which network was shared through RBAC.

Now network will be always get with context which have got set proper
tenant_id so "shared" flag will be set properly even in case if it's
shared through RBAC.

[1] https://review.opendev.org/#/c/652636/

Change-Id: I38615c0d18bb5a1f22f3e7865ce24615a540aa9a
Closes-Bug: #1833455
This commit is contained in:
Slawek Kaplonski 2019-06-21 13:09:05 +02:00
parent d35dd9c9c8
commit d5edb080b0

View File

@ -380,9 +380,11 @@ class FieldCheck(policy.Check):
"%(target_dict)s", "%(target_dict)s",
{'field': self.field, 'target_dict': target_dict}) {'field': self.field, 'target_dict': target_dict})
return return
project_id = target_dict.get('project_id')
ctx = (context.Context(tenant_id=project_id) if project_id
else context.get_admin_context())
plugin = directory.get_plugin() plugin = directory.get_plugin()
network = plugin.get_network( network = plugin.get_network(ctx, target_network_id)
context.get_admin_context(), target_network_id)
target_value = network.get(self.field) target_value = network.get(self.field)
if target_value is None: if target_value is None:
LOG.debug("Unable to find requested field: %(field)s in target: " LOG.debug("Unable to find requested field: %(field)s in target: "