Зачем пользователю из компании А сообщать, что у него нет разрешения на добавление пользователей в группу, принадлежащую компании Б? Они вообще не должны видеть, что группа Б существует. Почему обе компании не должны иметь возможность иметь группу с одинаковым именем?
Я бы ожидал, что код будет выглядеть примерно так.
def add_member(data, actor): # <-- actor is the user that clicked the button in the ui
company = CompanyRepository.find(actor.company)
group = company.groups().find(id=data.id)
new_member = UserRepository.find(id=data.new_member)
group.add_member(new_member)
return 'OK'
Просто пусть каждый поиск компании, группы, члена бросает, если не находит запрашиваемый ключ. Возврат None все усложняет. Теперь вашими возможными исключениями являются только
И все.