Add policy checking for transfer create/accept.
This patch adds policy checks for transfer create/accept as well as adding the associated default policy. In addition we add the wrap in the volume/api accept_transfer method. Fixes bug: 1187910 Change-Id: I599ac0a95cea1605380d4595a1f21023fbcfb6f1
This commit is contained in:
@@ -38,5 +38,11 @@
|
|||||||
"volume_extension:volume_image_metadata": [],
|
"volume_extension:volume_image_metadata": [],
|
||||||
"volume_extension:volume_host_attribute": [["rule:admin_api"]],
|
"volume_extension:volume_host_attribute": [["rule:admin_api"]],
|
||||||
"volume_extension:volume_tenant_attribute": [["rule:admin_api"]],
|
"volume_extension:volume_tenant_attribute": [["rule:admin_api"]],
|
||||||
"volume_extension:hosts": [["rule:admin_api"]]
|
"volume_extension:hosts": [["rule:admin_api"]],
|
||||||
|
|
||||||
|
"volume:create_transfer": [],
|
||||||
|
"volume:accept_transfer": [],
|
||||||
|
"volume:delete_transfer": [],
|
||||||
|
"volume:get_all_transfers": []
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ class API(base.Base):
|
|||||||
"""
|
"""
|
||||||
Make the RPC call to delete a volume transfer.
|
Make the RPC call to delete a volume transfer.
|
||||||
"""
|
"""
|
||||||
|
volume_api.check_policy(context, 'delete_transfer')
|
||||||
transfer = self.db.transfer_get(context, transfer_id)
|
transfer = self.db.transfer_get(context, transfer_id)
|
||||||
|
|
||||||
volume_ref = self.db.volume_get(context, transfer.volume_id)
|
volume_ref = self.db.volume_get(context, transfer.volume_id)
|
||||||
@@ -69,6 +70,7 @@ class API(base.Base):
|
|||||||
self.db.transfer_destroy(context, transfer_id)
|
self.db.transfer_destroy(context, transfer_id)
|
||||||
|
|
||||||
def get_all(self, context, filters={}):
|
def get_all(self, context, filters={}):
|
||||||
|
volume_api.check_policy(context, 'get_all_transfers')
|
||||||
if context.is_admin and 'all_tenants' in filters:
|
if context.is_admin and 'all_tenants' in filters:
|
||||||
transfers = self.db.transfer_get_all(context)
|
transfers = self.db.transfer_get_all(context)
|
||||||
else:
|
else:
|
||||||
@@ -93,6 +95,7 @@ class API(base.Base):
|
|||||||
|
|
||||||
def create(self, context, volume_id, display_name):
|
def create(self, context, volume_id, display_name):
|
||||||
"""Creates an entry in the transfers table."""
|
"""Creates an entry in the transfers table."""
|
||||||
|
volume_api.check_policy(context, 'create_transfer')
|
||||||
LOG.info("Generating transfer record for volume %s" % volume_id)
|
LOG.info("Generating transfer record for volume %s" % volume_id)
|
||||||
volume_ref = self.db.volume_get(context, volume_id)
|
volume_ref = self.db.volume_get(context, volume_id)
|
||||||
if volume_ref['status'] != "available":
|
if volume_ref['status'] != "available":
|
||||||
@@ -125,6 +128,7 @@ class API(base.Base):
|
|||||||
"""Accept a volume that has been offered for transfer."""
|
"""Accept a volume that has been offered for transfer."""
|
||||||
# We must use an elevated context to see the volume that is still
|
# We must use an elevated context to see the volume that is still
|
||||||
# owned by the donor.
|
# owned by the donor.
|
||||||
|
volume_api.check_policy(context, 'accept_transfer')
|
||||||
transfer = self.db.transfer_get(context.elevated(), transfer_id)
|
transfer = self.db.transfer_get(context.elevated(), transfer_id)
|
||||||
|
|
||||||
crypt_hash = self._get_crypt_hash(transfer['salt'], auth_key)
|
crypt_hash = self._get_crypt_hash(transfer['salt'], auth_key)
|
||||||
|
|||||||
@@ -518,6 +518,7 @@ class API(base.Base):
|
|||||||
connector,
|
connector,
|
||||||
force)
|
force)
|
||||||
|
|
||||||
|
@wrap_check_policy
|
||||||
def accept_transfer(self, context, volume):
|
def accept_transfer(self, context, volume):
|
||||||
return self.volume_rpcapi.accept_transfer(context,
|
return self.volume_rpcapi.accept_transfer(context,
|
||||||
volume)
|
volume)
|
||||||
|
|||||||
@@ -29,5 +29,11 @@
|
|||||||
"volume_extension:volume_tenant_attribute": [["rule:admin_api"]],
|
"volume_extension:volume_tenant_attribute": [["rule:admin_api"]],
|
||||||
"volume_extension:hosts": [["rule:admin_api"]],
|
"volume_extension:hosts": [["rule:admin_api"]],
|
||||||
"volume_extension:services": [["rule:admin_api"]],
|
"volume_extension:services": [["rule:admin_api"]],
|
||||||
"volume:services": [["rule:admin_api"]]
|
"volume:services": [["rule:admin_api"]],
|
||||||
|
|
||||||
|
"volume:create_transfer": [],
|
||||||
|
"volume:accept_transfer": [],
|
||||||
|
"volume:delete_transfer": [],
|
||||||
|
"volume:get_all_transfers": []
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user