Расскажу вам сказку про разделение прав доступа на уровне небольшой организации, которая успешно растет в большую корпорацию.  Программист Семен устроился однажды в молодую, перспективную компанию, с дружным, слаженным коллективом. По крайней мере, HR-менеджер все так описала, приятным голосом на собеседовании. Оказалось, что это филиал в пятом колене дочки какой-то крупной нефтяной корпорации. И сотрудники банально перепродавали трубы и всякие металлические конструкции, которые собирали по всей России-матушке у разных заводиков. Семен по началу даже испугался, что вместо кода ему придется компы настраивать и принтеры заправлять, но, к счастью, организация была прогрессивная и кроме программиста была должность девопса-админа-эникейщика, которую занимал толстяк-весельчак. Семен с ним быстро сдружился. В первую неделю показали наработки двух предыдущих программистов. Это была самопальная CRM-ка, изначально она задумывалась как сайт с каталогом товаров. Позднее к сайту прикрутили форму заявки, стали добавляться карточки клиентов и понеслось. Потом даже хотели перенести логику и наработанные данные на какую-нибудь известную систему, но у директора было свое видение, и он решил выращивать собственную систему вместе с отладкой процессов в бизнесе. Семену пришлось засучить рукава и погружаться в дремучий легаси-код. В диком обществе, где все равны и могут редактировать, удалять и добавлять что угодно, начинается хаос. Представьте, что трудолюбивый Вася обзвонил двадцать клиентов за день и занес их в базу. А злой и ленивый Коля, взял и удалил все что Вася наработал. Потому что Коле за косяки урезали премию, и он, предчувствуя близящееся увольнение, решил насолить. И вот директор дает задание программисту, надо исправить и запретить маргинальным личностям портить работу добросовестных сотрудников. Программист залезает в исходный код и видит, что пользователи навалены общей кучей. И программист-новичок берет логин пользователя Вася и везде в коде ставит условие, чтобы Вася не мог удалять записи. А Коле можно редактировать и удалять. Начальнику можно удалять. Директору можно все, поэтому на него проверку не ставим. Вроде разрулил, показал директору, попробовали удалять под логином Васи – не дает, значит все правильно теперь можно спокойно работать дальше. Проходит месяц, Васю все-таки увольняют и нанимают Машу. Маша совсем не злая, она просто немного не шарит. И пока болтает с подружкой в вотсапе, иногда промахивается и удаляет не те записи! Директор снова в бешенстве, вызывает программиста на ковер и спрашивает: «Ах, ты паршивец! Я тебе за что деньги плачу! В прошлом месяце ты все исправил, чтобы нерадивые не могли удалять, почему Маша удалила? Почини немедленно!» Семен покраснел, помялся, пробубнил что-то про сложность кода и отправился в свою каморку исправлять проблему. Сначала хотел просто поменять в коде логин «Вася» на «Маша», но потом подумал, что Маша тоже долго не продержится и появиться кто-то другой. И тут на нашего гения снизошло озарение! Он понял, что всех пользователей нужно разделить на группы и раздавать права доступа строго по группам. Тогда можно будет просто всех неумех включать в группу «Стажеры». Так появилось следующее разделение: Администраторы – могут все. Начальники отделов – могут все, но только с теми записями, которые создали его подчиненные. Работники – могут все, но только со своими записями. Стажеры – могут только добавлять и редактировать записи, чтобы не могли сильно самим себе навредить. Радостный программист пыхтел три дня и три ночи, но выкатил новую версию в продакшн. С темными кругами под глазами побежал к директору показывать чудо инженерной мысли. Даже накидал небольшую презентацию со скриншотами, где можно было видеть панель управления пользователями с новой кнопкой назначения группы каждому. Директор был несказанно рад и даже сам распределил всех работников по группам, посмотрел, что теперь все замечательно работает и довольный улетел на Мальдивы. Так незаметно пролетело полгода, все радостные и довольные работали не покладая рук. Трудолюбивые и добросовестные создавали добавленную стоимость, нерадивые и зловредные не могли этому помешать. Но однажды директор в сауне встретился с новыми деловыми партнерами. Там он узнал, что Россия-матушка богата не только нефтью, но и лесом, который замечательно продается в Китай.  Было решено заняться теперь техникой для заготовки леса. Только бизнес-процесс нужно немного подкорректировать, добавить некоторые новые номенклатуры товаров, контрагентов из того же Китая, как оказалось там лучшая техника. Воодушевленный директор появился на планерке перед всем коллективом на следующий день, еще немного с похмелья, но все-таки смог внятно рассказать про новое направление. Теперь выходит, что программисту придется реализовать не только изменения в организационной структуре, а еще и функции новые добавляются. Если раньше это было просто добавление записей труб и клиентов, то теперь нужно внедрять создание контрактов на поставку оборудования и машин из Китая. При этом на определенных стадиях поставки будут ответственны разные сотрудники. Кто-то знает китайский и проводит закупки у поставщиков поднебесной. Другой сотрудник изучил все тонкости растаможки, и без проблем провозит через границу целые составы. Ну а третий знает всех лесозаготовителей и быстро распродает чудесные желтые машины.  То есть вместе с текучкой кадров, образовывается текучка функций. Конечно, без системного подхода реализовать такую сложную систему невозможно. По счастью, Семен прогуливал не все лекции по высшей математике и ему кое-что вспомнилось из университетского курса. Когда в системе есть такое множество функций, которые нужно распределять между пользователями в зависимости от их прав доступа, то можно применить матрицы.  Все вы играли в «Морской бой» или «Шахматы». Есть ось X и Y. На поле мы располагаем корабли или шахматные фигуры, а чтобы определить местоположение достаточно знать всего два значения X и Y. В случае нашей большой корпоративной системой, мы представим, что группы сотрудников — располагаются на оси X, а функции, которые доступны каждой группе на Y. Теперь, чтобы делегировать права на выполнение операции группе, нужно просто поставить одну галочку напротив нужной группы и функции.  Знаю, что звучит легко, но реализовывал этот алгоритм Семен целых полгода. Зато, когда показал директору результат, тот был на седьмом небе от счастья. Предприимчивый руководитель к этому времени уже сотрудников новых набрал и первые контракты начал заключать. Дела у компании пошли в гору. Отдел маркетинга тоже постарался. Машины поставляли быстро, качество отличное. Правда, потребовались потом запчасти искать для ремонта, но и тут наш герой Семен не подкачал, быстро накидал новый интерфейс для заказа и поставки запасных частей. Все стало так замечательно, что директор решил поглотить другую компанию, которая промышляла строительными материалами. У той компании оказалась своя корпоративная система, в которой было много клиентов, бизнес-схем и всякого другого полезного. Директор снова вызвал программиста и обрадовал его новой грандиозной задачей объединения двух корпоративных систем.  Но это уже история про микросервисы, про которые я расскажу в следующих главах. Вывод Финальная мысль, которую я хочу донести до аудитории и во что я верю: для создания действительно мощной корпорации необходимо растить собственную IT-систему, которая будет каждой строчкой кода оплетать бизнес-структуру компании. Я размещал эту статью на других площадках, везде твердили про 1c – что она может все это сделать на раз-два. Для бухгалтерии, возможно, 1с в России лучшее решение. Но для бизнес-архитектуры руководителю необходимо вырабатывать собственное видение, тогда будет рост.  Когда предприниматель до атома понимает, что движет тем или иным процессом, а главное, как на это можно повлиять, тогда появляется тот самый рычаг для «поднятия Земли». И пусть на это уйдет десять или двадцать лет, но шанс не быть смытым конкурентами при очередном кризисе возрастает, когда ты действуешь не как 99% компаний на рынке.