X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FAddPersonToSlice.py;h=e3392eb9a69f986504a1c54f1378aa9d9c3c0bfd;hb=4c450582aee96a815d62fdfa9ed65e911d37cbf7;hp=39df45a890817fa59438ac55d8af8de06cce1599;hpb=4714de5191bcce96f08d9d0f546394813fda7f0a;p=plcapi.git diff --git a/PLC/Methods/AddPersonToSlice.py b/PLC/Methods/AddPersonToSlice.py index 39df45a..e3392eb 100644 --- a/PLC/Methods/AddPersonToSlice.py +++ b/PLC/Methods/AddPersonToSlice.py @@ -3,7 +3,7 @@ from PLC.Method import Method from PLC.Parameter import Parameter, Mixed from PLC.Persons import Person, Persons from PLC.Slices import Slice, Slices -from PLC.Auth import PasswordAuth +from PLC.Auth import Auth class AddPersonToSlice(Method): """ @@ -16,7 +16,7 @@ class AddPersonToSlice(Method): roles = ['admin', 'pi'] accepts = [ - PasswordAuth(), + Auth(), Mixed(Person.fields['person_id'], Person.fields['email']), Mixed(Slice.fields['slice_id'], @@ -30,23 +30,32 @@ class AddPersonToSlice(Method): persons = Persons(self.api, [person_id_or_email]) if not persons: raise PLCInvalidArgument, "No such account" - - person = persons.values()[0] + person = persons[0] # Get slice information slices = Slices(self.api, [slice_id_or_name]) if not slices: raise PLCInvalidArgument, "No such slice" + slice = slices[0] - slice = slices.values()[0] + # N.B. Allow foreign users to be added to local slices and + # local users to be added to foreign slices (and, of course, + # local users to be added to local slices). + if person['peer_id'] is not None and slice['peer_id'] is not None: + raise PLCInvalidArgument, "Cannot add foreign users to foreign slices" - # If we are not admin, make sure the caller is a pi + # 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 add users to this slice" + if slice['site_id'] not in self.caller['site_ids']: + raise PLCPermissionDenied, "Not allowed to add users to this slice" if slice['slice_id'] not in person['slice_ids']: slice.add_person(person) + # Logging variables + self.event_objects = {'Person': [person['person_id']], + 'Slice': [slice['slice_id']]} + self.object_ids = [slice['slice_id']] + return 1