def findAllItems(user=None, baseFolder=None):
        if not baseFolder:
            return CLIItem._findAllItemImpl(user)

        folderModel = Folder()
        graphLookup = {
            'from': 'folder',
            'startWith': '$_id',
            'connectFromField': '_id',
            'connectToField': 'parentId',
            'as': 'children'
        }

        if user and not user['admin']:
            graphLookup[
                'restrictSearchWithMatch'] = folderModel.permissionClauses(
                    user, AccessType.READ)

        # see https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup
        r = folderModel.collection.aggregate([{
            '$match':
            dict(_id=baseFolder['_id'])
        }, {
            '$graphLookup': graphLookup
        }, {
            '$project': {
                'leaves': '$children._id',
            }
        }])

        leaves = next(r)['leaves']

        return CLIItem._findAllItemImpl(
            user, {'folderId': {
                '$in': [baseFolder['_id']] + leaves
            }})