Здравствуй, Хабр!

В прошлой статье мы рассматривали «лоскутный» подход к внедрению low-code платформы. Напомню, одна из проблем, которые мы собирались решать, звучит следующим образом: «Информационные системы зачастую… имеют изолированные друг от друга системы доступа и авторизации - вследствие чего сотрудникам приходится помнить и пользоваться несколько учетными записями».

При поиске решения этой проблемы, мы отталкивались от выбранного подхода к внедрению, согласно которому каждый лоскуток является не только покрытием участков рабочих процессов, но и агентом в смежных информационных системах. Это позволит получить в едином окне доступ не только к тем процессам, которые покрыты лоскутками платформы, но и к смежным с ними, реализованным в других системах. Доступ может быть реализован следующими способами:

1.    Вызов методов апи смежных систем;

2.    Прямое чтение/запись из/в БД смежных систем;

3.    Доступ к функциональности смежных систем путем вынесения ссылок на их пользовательские интерфейсы на единый рабочий стол с сохранением внешних пользовательских сессий.

Также как вариант доступа возможна замена устаревающих участков процессов смежных систем лоскутками.

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

Мы посмотрели несколько достаточно разных реализаций (варианты ACL, доступ на основе шэринга), и в итоге пришли к следующей, достаточно абстрактной структуре:

1.    Иерархический справочник субъектов. Субъект может быть группой, либо отдельным пользователем.

2.    Иерархический справочник объектов. Объект может быть разделом, формой, компонентом формы, методом апи, записью, полем.

3.    Справочник возможных действий над объектами. Определяется для каждого типа объектов.

4.    Таблица правил доступа субъектов к действиям над объектами. Содержит также приоритет правила.

Изначально вся система закрыта, есть только разрешающие правила.

Иерархии субъектов и объектов необходимы для того, чтобы облегчить процесс назначения прав и избежать дублирования данных. Если дочерние узлы не нуждаются в отличных от родителей правах, данные хранятся только для верхних уровней.

Также мы предусмотрели возможность разрыва наследования прав для объектов путем указания соответствующего признака - для изоляции правила от его родителей в рамках приоритета.

Приоритет правил необходим для некоторых случаев, например, если мы хотим дать разрешение админу на самый корень, и не хотим, чтобы дочерние узлы могли игнорировать эти правила.

При попытке актора выполнить действие, производится поиск и вычисление прав на разных уровнях приоритета. На каждом приоритете находятся все правила по иерархии, от рассматриваемого объекта, вверх, до разрыва наследования. Из собранных по иерархии объектов правил выбираются подходящие по субъектности и типу действия. Далее происходит суммирование всех разрешений, которые актор может получить для рассматриваемого типа действия.

У конечных пользователей и проектировщиков платформы должна быть возможность делегировать права на объекты в ручном или автоматическом режиме, создавая новые правила. Для правил, созданных вручную, должен храниться автор - с целью возможности отмены делегирования прав в случае, например, ошибки.

Для упрощения процесса внедрения этой системы в работу, необходимо разработать:

1.    механизм импорта данных о субъектах из ActiveDirectory и подобных ей систем аутентификации.

2.    интерфейс для быстрого наполнения справочника объектов как из самой платформы, так и из доступных смежных систем.

Итого, для получения всех необходимых пользователю функций в одном окне, необходимо дополнить все перечисленное механизмом получения и применения данных пользовательских сессий смежных систем. Данные будет применяться для автоматической авторизации при переходе по ссылке с рабочего стола во внешние интерфейсы или вызове апи.

О способах обеспечения информационной безопасности этой структуры мы расскажем в одной из следующих статей.

Комментарии (3)


  1. RostButaev Автор
    00.00.0000 00:00

    Последующим минусующим - большая просьба сопровождать минус комментариями - непонятно, что не так.


    1. Vasjen
      00.00.0000 00:00

      непонятно, что не так.

      Не минусил, сразу оговорюсь. Чисто мои вопросы, которые появились во время прочтения и остались без ответа после.

      Во-первых, само движение лоукода/ноукода, скажем так, мягко говоря - неоднозначное. И как указывали ранее, ваш подход и реализацию интересно рассмотреть на примере какого-то конкретного решения, а не условных абстракцих и инструкций.

      Во-вторых, лично мне не особо понятны бенефитсы отказа от обкатанного миллионами людей инструментарий, готовых библиотек, фреймворков, API и т.д. в пользу вашего решения? Кто и как будет гарантировать, что все это будет кем-то поддерживаться, развиваться и работать как надо.

      И в-третьих, у меня как у экономиста вопрос, зачем это бизнесу? Я понимаю, что на каждый товар свой купец, но есть какой-то опыт решения конкретных задач с таким подходом? Мол бизнесу не нужны 2 разработчика, нужен один, так как с помощью лоукода он может реализовать тоже самое, что было.


      1. RostButaev Автор
        00.00.0000 00:00

        Добрый день!
        Спасибо за комментарий, постараюсь снять все вопросы:
        1. " само движение лоукода/ноукода, скажем так, мягко говоря - неоднозначное" - в ноукод я сам вообще не верю, а что касается low-code - тут у меня есть непосредственный опыт разработки на предтече подобной платформы, в ходе которого я "в 1 каску" реализовал относительно объемный модуль строительного учета примерно за 3 недели от окончания обследования. При этом у 1 из моих нынешних команд традиционной заказной разработки в составе 8 разработчиков это заняло бы примерно столько же времени.

        2. "бенефитсы отказа от обкатанного миллионами людей... " - отличие нашей платформы от аналогов состоит в том, что мы не изобретаем собственный язык, не прячемся за абстракциями, а просто формируем каркас приложения в виде моделей базы, бэка и фронта, на основе которых генерируется набор связанных вызовами объявлений на 3 уровнях стека, расширяемых разработчиками в родных для них IDE удобными им способами с помощью привычных инструментов.
        Прошу прощения за сложность предложения.

        3. "зачем это бизнесу? " - этот вопрос мог быть актуален более года назад, но сейчас ситуация в сфере автоматизации процесса управления предприятиями довольна бинарная - либо 1С, либо эксперименты (с точки зрения крупного бизнеса). SAP уходит, около миллиарда долларов ежегодно на территории СНГ будут освоены либо 1С, либо новым поколением.

        Кстати, тот же 1С ныне себя позиционирует как "современную low-code платформу".