Для групп и нескольких брендов
Несколько компаний, одна установка, никаких общих клиентов
Группы обычно решают эту задачу дважды плохо: либо пять отдельных установок и пять отдельных всего, либо одна установка и торжественное обещание, что приложение всегда фильтрует правильно. Первое дорого. Второе — обещание, а обещания не являются моделью безопасности.
Если вы управляете более чем одной компанией — холдингом с дочерними обществами, франшизой, двумя брендами для разных рынков, агентством и тем, что из него выделилось, — вы уже знаете очертания этой проблемы. Бренды делят людей, инструменты и финансовый отдел. Клиентов они не делят, и не должны даже казаться делящими.
iKonekt управляет всеми ими из одной установки, а разделение между ними обеспечивает база данных, а не код. Это различие звучит академично — до того дня, когда перестаёт.
Почему этот слой важен
Фильтр на уровне приложения — это фраза в запросе. Он работает, пока каждый запрос, который когда-либо будет написан, содержит её — включая написанный второпях, написанный новым разработчиком и написанный для отчёта, который собирались использовать один раз.
Перенесите границу в базу данных — и арифметика меняется. Политика выполняется при каждом чтении и каждой записи, под всем. Запрос, забывший про компанию, не возвращает неправильные строки; он не возвращает ничего. Режим отказа становится пустым экраном и озадаченным разработчиком — а это правильный режим отказа.
Пустые экраны — это возможность. Мы предпочли бы объяснить пустой экран нашему же инженеру, чем объяснять список клиентов двум клиентам, не ожидавшим такой встречи.
- 1Клиенты и перепискиИзолированы. Продавец бренда А не может добраться до данных бренда Б — по построению, а не по настройке.
- 2Претензии на клиента«У нас уже есть этот аккаунт» — это блокировка, удерживаемая на уровне компании, так что два бренда могут работать на одном рынке, не сталкиваясь.
- 3Промпты и настройкиКаждая компания редактирует свои. Единственное место, где они когда-либо были общими, — это ошибка, и это ошибка, которую эта система больше всего гордится тем, что нашла.
- 4Партнёрские программыМодуль на компанию, а не глобальный, который наследуют все.
Граница обеспечивается ниже уровня приложения
Чем группа на самом деле может делиться
Разделение — не изоляция ради изоляции. Тем, что стоит разделять внутри группы, делятся намеренно, и это по большей части скучные вещи — что совершенно правильно, потому что именно в скучных вещах живёт дублируемая стоимость:
- Одна установка для запуска и обновления. Одно развёртывание, один набор учётных данных, за которыми нужно следить, одна вещь, которую нужно патчить.
- Одна команда людей в разных ролях. Человек может работать более чем в одной компании; чего он не может — так это видеть обе сразу через запрос, забывший спросить.
- Один набор привычек. То, как назначается лид, как пишется заметка, как задача превращается в счёт — выученное один раз, применяемое везде, что сокращает адаптацию примерно до одного утра.
- Одни отношения с остальной семьёй. castomAPI под капотом, тот же аккаунт, те же коннекторы — настроенные на уровне компании там, где это важно.
Вопрос, который группа всегда задаёт вторым
«Можем ли мы строить отчёты по всем сразу?» Да — с собственной позиции группы, намеренно и явно, а не как побочный эффект дырявой границы. Это различие и есть весь замысел: пересечение линии должно быть действием, которое кто-то совершил нарочно, имея на то полномочия. Оно никогда не должно быть тем, что случайный идентификатор может совершить по неосторожности.
А вопрос, который задают третьим: «что будет, если мы продадим один из брендов?» Граница, которую хранит база данных, — это также граница, из которой можно поднять чистую копию. Это не совпадение — разделение и переносимость суть одно свойство, увиденное с двух разных совещаний.
Под полом
Что именно держит линию
Не заявление, а список. Если поставщик не может предъявить такой список о собственном продукте, это само по себе стоит заметить.
26
Таблицы, несущие в себе свою компанию, с принудительно включённой проверкой, а не просто доступной.
72
Политики, выписанные по одной за раз, чтобы каждую прочитал человек, а не генерировал цикл.
942
Тесты, запускаемые на базе данных, пересобранной с нуля при каждом изменении.
0
Компании по умолчанию отсутствуют. Запрос без области видимости падает, не дойдя до данных — здесь нет резервного варианта, который можно забыть отключить.

«Пять компаний, пять установок, пять счетов от вас».
Одна установка. Пять границ, которые держит база данных.
Общие люди, общие привычки, общая платформа — и ни одного общего клиента. Пересечение этой границы должно быть только осознанным действием человека, но никогда — случайно подобранным идентификатором.
Как устроена изоляция →