summaryrefslogtreecommitdiff
path: root/ironic/api/controllers/v1/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'ironic/api/controllers/v1/utils.py')
-rw-r--r--ironic/api/controllers/v1/utils.py26
1 files changed, 16 insertions, 10 deletions
diff --git a/ironic/api/controllers/v1/utils.py b/ironic/api/controllers/v1/utils.py
index 1d1e0aa24..4af137645 100644
--- a/ironic/api/controllers/v1/utils.py
+++ b/ironic/api/controllers/v1/utils.py
@@ -1458,8 +1458,11 @@ def check_policy(policy_name):
:policy_name: Name of the policy to check.
:raises: HTTPForbidden if the policy forbids access.
"""
+ # NOTE(lbragstad): Mapping context attributes into a target dictionary is
+ # effectively a noop from an authorization perspective because the values
+ # we're comparing are coming from the same place.
cdict = api.request.context.to_policy_values()
- policy.authorize(policy_name, cdict, cdict)
+ policy.authorize(policy_name, cdict, api.request.context)
def check_owner_policy(object_type, policy_name, owner, lessee=None):
@@ -1478,7 +1481,7 @@ def check_owner_policy(object_type, policy_name, owner, lessee=None):
target_dict[object_type + '.owner'] = owner
if lessee:
target_dict[object_type + '.lessee'] = lessee
- policy.authorize(policy_name, target_dict, cdict)
+ policy.authorize(policy_name, target_dict, api.request.context)
def check_node_policy_and_retrieve(policy_name, node_ident,
@@ -1502,7 +1505,7 @@ def check_node_policy_and_retrieve(policy_name, node_ident,
# don't expose non-existence of node unless requester
# has generic access to policy
cdict = api.request.context.to_policy_values()
- policy.authorize(policy_name, cdict, cdict)
+ policy.authorize(policy_name, cdict, api.request.context)
raise
check_owner_policy('node', policy_name,
@@ -1527,7 +1530,7 @@ def check_allocation_policy_and_retrieve(policy_name, allocation_ident):
# don't expose non-existence unless requester
# has generic access to policy
cdict = api.request.context.to_policy_values()
- policy.authorize(policy_name, cdict, cdict)
+ policy.authorize(policy_name, cdict, api.request.context)
raise
check_owner_policy('allocation', policy_name, rpc_allocation['owner'])
@@ -1571,12 +1574,13 @@ def check_list_policy(object_type, owner=None):
cdict = api.request.context.to_policy_values()
try:
policy.authorize('baremetal:%s:list_all' % object_type,
- cdict, cdict)
+ cdict, api.request.context)
except exception.HTTPForbidden:
project_owner = cdict.get('project_id')
if (not project_owner or (owner and owner != project_owner)):
raise
- policy.authorize('baremetal:%s:list' % object_type, cdict, cdict)
+ policy.authorize('baremetal:%s:list' % object_type,
+ cdict, api.request.context)
return project_owner
return owner
@@ -1599,14 +1603,14 @@ def check_port_policy_and_retrieve(policy_name, port_uuid):
except exception.PortNotFound:
# don't expose non-existence of port unless requester
# has generic access to policy
- policy.authorize(policy_name, cdict, cdict)
+ policy.authorize(policy_name, cdict, context)
raise
rpc_node = objects.Node.get_by_id(context, rpc_port.node_id)
target_dict = dict(cdict)
target_dict['node.owner'] = rpc_node['owner']
target_dict['node.lessee'] = rpc_node['lessee']
- policy.authorize(policy_name, target_dict, cdict)
+ policy.authorize(policy_name, target_dict, context)
return rpc_port, rpc_node
@@ -1619,12 +1623,14 @@ def check_port_list_policy():
"""
cdict = api.request.context.to_policy_values()
try:
- policy.authorize('baremetal:port:list_all', cdict, cdict)
+ policy.authorize('baremetal:port:list_all',
+ cdict, api.request.context)
except exception.HTTPForbidden:
owner = cdict.get('project_id')
if not owner:
raise
- policy.authorize('baremetal:port:list', cdict, cdict)
+ policy.authorize('baremetal:port:list',
+ cdict, api.request.context)
return owner