def remove(self, folder, progress=None, **kwargs): """ Delete a profile recursively. :param profile: The profile document to delete. :type folder: dict :param progress: A progress context to record progress on. :type progress: girderformindlogger.utility.progress.ProgressContext or None. """ # Remove the contents underneath this folder recursively. from girderformindlogger.models.upload import Upload # self.clean(folder, progress, **kwargs) # Delete pending uploads into this folder uploadModel = Upload() uploads = uploadModel.find({ 'appletId': folder['_id'], 'parentType': 'profile' }) for upload in uploads: uploadModel.remove(upload, progress=progress, **kwargs) uploads.close() # Delete this folder AccessControlledModel.remove(self, folder, progress=progress, **kwargs) if progress: progress.update(increment=1, message='Deleted profile %s' % folder['name'])
def remove(self, invitation, progress=None, **kwargs): """ Delete an invitation. :param invitation: The invitation document to delete. :type invitation: dict """ # Delete this invitation AccessControlledModel.remove(self, invitation, progress=progress, **kwargs) if progress: progress.update(increment=1, message='Deleted invitation')
def setAccessList(self, doc, access, save=False, recurse=False, user=None, progress=noProgress, setPublic=None, publicFlags=None, force=False): """ Overrides AccessControlledModel.setAccessList to add a recursive option. When `recurse=True`, this will set the access list on all subfolders to which the given user has ADMIN access level. Any subfolders that the given user does not have ADMIN access on will be skipped. :param doc: The folder to set access settings on. :type doc: girderformindlogger.models.folder :param access: The access control list. :type access: dict :param save: Whether the changes should be saved to the database. :type save: bool :param recurse: Whether this access list should be propagated to all subfolders underneath this folder. :type recurse: bool :param user: The current user (for recursive mode filtering). :param progress: Progress context to update. :type progress: :py:class:`girderformindlogger.utility.progress.ProgressContext` :param setPublic: Pass this if you wish to set the public flag on the resources being updated. :type setPublic: bool or None :param publicFlags: Pass this if you wish to set the public flag list on resources being updated. :type publicFlags: flag identifier str, or list/set/tuple of them, or None :param force: Set this to True to set the flags regardless of the passed in user's permissions. :type force: bool """ progress.update(increment=1, message='Updating ' + doc['name']) if setPublic is not None: self.setPublic(doc, setPublic, save=False) if publicFlags is not None: doc = self.setPublicFlags(doc, publicFlags, user=user, save=False, force=force) doc = AccessControlledModel.setAccessList( self, doc, access, user=user, save=save, force=force) if recurse: subfolders = self.findWithPermissions({ 'appletId': doc['_id'], 'parentCollection': 'profile' }, user=user, level=AccessType.ADMIN) for folder in subfolders: self.setAccessList( folder, access, save=True, recurse=True, user=user, progress=progress, setPublic=setPublic, publicFlags=publicFlags, force=force) return doc
def remove(self, user, progress=None, **kwargs): """ Delete a user, and all references to it in the database. :param user: The user document to delete. :type user: dict :param progress: A progress context to record progress on. :type progress: girderformindlogger.utility.progress.ProgressContext or None. """ from girderformindlogger.models.folder import Folder from girderformindlogger.models.group import Group from girderformindlogger.models.token import Token # Delete all authentication tokens owned by this user Token().removeWithQuery({'userId': user['_id']}) # Delete all pending group invites for this user Group().update({'requests': user['_id']}, {'$pull': { 'requests': user['_id'] }}) # Delete all of the folders under this user folderModel = Folder() folders = folderModel.find({ 'parentId': user['_id'], 'parentCollection': 'user' }) for folder in folders: folderModel.remove(folder, progress=progress, **kwargs) # Finally, delete the user document itself AccessControlledModel.remove(self, user) if progress: progress.update(increment=1, message='Deleted user ' + user['login'])