From 4cb50587f54132477e739be1fc91312bd3d7de07 Mon Sep 17 00:00:00 2001 From: Mark Huang Date: Wed, 11 Oct 2006 17:48:14 +0000 Subject: [PATCH] - allow members of slice to delete nodes from slice --- PLC/Methods/DeleteSliceFromNodes.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/PLC/Methods/DeleteSliceFromNodes.py b/PLC/Methods/DeleteSliceFromNodes.py index c61c5eb6..12a9b264 100644 --- a/PLC/Methods/DeleteSliceFromNodes.py +++ b/PLC/Methods/DeleteSliceFromNodes.py @@ -13,7 +13,7 @@ class DeleteSliceFromNodes(Method): Returns 1 if successful, faults otherwise. """ - roles = ['admin', 'pi'] + roles = ['admin', 'pi', 'user'] accepts = [ PasswordAuth(), @@ -26,7 +26,6 @@ class DeleteSliceFromNodes(Method): returns = Parameter(int, '1 if successful') def call(self, auth, slice_id_or_name, node_id_or_hostname_list): - # Get slice information slices = Slices(self.api, [slice_id_or_name]) if not slices: @@ -37,15 +36,17 @@ class DeleteSliceFromNodes(Method): # Get specified nodes nodes = Nodes(self.api, node_id_or_hostname_list).values() - # If we are not admin, make sure the caller is a pi - # of the site associated with the slice - if 'admin' not in self.caller['roles']: - if slice['site_id'] not in self.caller['site_ids']: - raise PLCPermissionDenied, "Not allowed to delete nodes from this slice" + if 'admin' not in self.caller['roles']: + if self.caller['person_id'] in slice['person_ids']: + pass + elif 'pi' not in self.caller['roles']: + raise PLCPermissionDenied, "Not a member of the specified slice" + elif slice['site_id'] not in self.caller['site_ids']: + raise PLCPermissionDenied, "Specified slice not associated with any of your sites" - # add slice to all nodes found + # Remove slice from all nodes found for node in nodes: - if slice['slice_id'] in node['slice_ids']: - slice.remove_node(node) + if slice['slice_id'] in node['slice_ids']: + slice.remove_node(node) return 1 -- 2.47.0