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:
parent
d35dd9c9c8
commit
d5edb080b0
@ -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: "
|
||||||
|
Loading…
Reference in New Issue
Block a user