!
Мы используем cookie. Они помогают нам понять, как вы взаимодействуете с сайтом. Изменить настройки

Как разработать самописную ролевую модель и единую точку входа для сервисов на микросервисной архитектуре

Как разработать самописную ролевую модель и единую точку входа для сервисов на микросервисной архитектуре


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

Тогда возникает вопрос, а что делать с безопасностью данных, как их защитить и выполнить соблюдение законодательства. Ответ оказался простым, ну или не очень, решать только вам. 

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

Начнем с азов

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

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

Главный тут момент, что полномочия расширяются с каждой новой ролью присвоенной сотруднику.

Так где собака зарыта или на что следует обратить внимание при создании ролевой модели:

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

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

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

От слов к делу 

Перейдем к рассмотрению практического примера:

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

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

Эволюция архитектуры авторизации:

1. Первоначальная реализация:

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

Принцип работы:

•  Единая авторизация: Пользователь авторизуется в едином сервисе авторизации, обеспечивая сквозной доступ ко всем подключенным сервисам.

•  Переход между сервисами: После успешной авторизации пользователь может переходить между сервисами через меню или по прямой ссылке.

Настройка ролевой модели:

•  Централизованное управление: Настройка ролевой модели (доступ к сервисам для каждой роли) осуществляется в единой административной панели.

•  Гибкость: Система поддерживает любое количество ролей в зависимости от потребностей бизнеса с возможностью индивидуальной настройки прав доступа для каждой роли в каждом сервисе.

•  Различные уровни доступа: Авторизованным пользователям на различных сервисах могут быть предоставлены доступы в зависимости от того, откуда он пришел, и какие у него роли.

Процесс авторизации:

1. Авторизация на сервисе: Пользователь проходит двухфакторную аутентификацию.

2. Получение ролей: Сервис отправляет HTTPS-запрос к API сервиса авторизации для получения набора доступов согласно его текущей роли. 

3. Хранение доступов: Полученный набор доступов согласно роли сохраняется в сессии пользователя.

4. Проверка прав доступа: На стороне приложения (конечного сервиса) для каждого функционального блока используется механизм Gate для проверки наличия соответствующего доступа в сессии пользователя.

  •  Доступ разрешен: Если доступ присутствует в сессии, пользователю предоставляется доступ к блоку.

  •  Доступ запрещен: Если доступ отсутствует в сессии, пользователю доступ к блоку не предоставляется.

Изменение прав доступа:

•  Сброс сессии: При изменении прав доступа пользователя или организации, к которой он относится, происходит принудительная разавторизация пользователя во всех сервисах.

•  Повторная авторизация: Пользователю необходимо пройти повторную авторизацию для получения актуального набора доступов согласно роли пользователя.

•  Индивидуальные настройки для организаций: Система позволяет настраивать индивидуальные права доступа для ролей в рамках каждой организации. Это позволяет предоставлять различным организациям разные уровни доступа к одному и тому же сервису для одинаковых ролей.

 Отметим, что HTTPS-запрос к сервису авторизации выполняется только один раз – при авторизации пользователя в сервисе. Далее информация о ролях и правах доступа хранится в сессии пользователя.

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

2. Подведем итоги, как выглядит текущая реализация: централизованное управление.

  • Вместо хранения информации о разрешениях в базах данных, каждый сервис самостоятельно определяет Gate (механизм контроля доступа к действиям). Сервис анализирует набор прав, полученных пользователем при авторизации, и предоставляет доступ к функционалу только в том случае, если у пользователя имеются соответствующие разрешения.
  • Права доступа хранятся в сессии пользователя и аннулируются при ее завершении. Любые изменения в ролях пользователя или его организации приводят к принудительной деавторизации и необходимости повторной авторизации для получения актуальных прав доступа.

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

Добавим немного технических деталей: 

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

Есть история изменений. Любой менеджер, который может изменять ролевую модель или разделы, при внесении изменений оставляет свой идентификатор. Все изменения фиксируются в истории. Можно откатиться к предыдущим версиям через интерфейс.

Технически это работает так: есть базовая модель пользователя, ролей и секций. Каждая секция относится к определенному сервису. Доступ к сервисам разделяется на секции. В одном сервисе может быть одна или несколько секций, в зависимости от его размера. Но на них логика не заточена, они созданы для более удобного управления ролевой моделью. Хотя на некоторых сервисах есть доступы, привязанные к конкретным секциям.

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

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

Решение на PHP под разные фреймворки.

В основе наших проектов лежит гибридный подход к выбору технологий, который позволяет создавать решения различного уровня сложности. Отметим, что в основном мы используем CMS: 1С-Битрикс. Почти все сервисы, что разработаны нашей компанией написаны на нём.

Функциональный уровень который заимствуем из Битрикса зависит от проекта, например, в разработке интернет-магазина, мы берем больше всего от стандартного Битрикса (пользователи, корзина, каталог, обмен с 1С (довольно прилично допиленный, но на стороне 1С) и т.п.), а при разработке личного кабинета контрагента для промышленной компании Битрикс был задействован по минимуму(метода и классы ядра).

Соответственно, в небольших проектах единая точка входа может быть реализована на нем. Однако, для больших проектов Битрикс не рассматриваем как отдельный сервис для единой точки из-за избыточности встроенных модулей.

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

Почему именно Laravel, а не Symfony или что-то еще проще (Lumen или Slim).

Lumen/Slim: Можно рассматривать на старте, но с ростом функциональных требований (авторизация, управление ролями, привязка пользователей к организациям, работа с БД) станет менее подходящими. Реализация сложной ролевой модели на этих фреймворках потребовала бы нестандартных решений. 

Symfony: Выбор Laravel был обусловлен наличием квалифицированных разработчиков в штате, что позволило сократить сроки разработки и обеспечить высокое качество решения.

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



самописная ролевая модель
единая точка входа
1191
Фото автора: Евгений Некрасов

Евгений Некрасов

руководитель проектов RDN Group

16 материалов: гайды, шаблоны, чек листы, таблицы – все для быстрого старта по внедрению CRM.
16 материалов: гайды, шаблоны, чек листы, таблицы – все для быстрого старта по внедрению CRM.
Подробнее
27 пошаговых видеоуроков, охватывающих ключевые разделы Битрикс24 для автоматизации бизнеса
27 пошаговых видеоуроков, охватывающих ключевые разделы Битрикс24 для автоматизации бизнеса
Подробнее
Как работает готовый КЭДО и Госключ в Битрикс24, и какие преимущества это дает вашему бизнесу.
Как работает готовый КЭДО и Госключ в Битрикс24, и какие преимущества это дает вашему бизнесу.
Получить запись
Актуальные направления развития личных кабинетов для клиентов и сотрудников в промышленности.
Актуальные направления развития личных кабинетов для клиентов и сотрудников в промышленности.
Подробнее
8 видеоуроков по автоматизации HR-процессов: от адаптации сотрудников до управления карьерными траекториями.
8 видеоуроков по автоматизации HR-процессов: от адаптации сотрудников до управления карьерными траекториями.
Подробнее
консультация

Получите консультацию бизнес-аналитика RDN Group

Подскажем, какие технологии дадут максимальный эффект...


01
Анализ текущих бизнес-процессов
03
Прогноз окупаемости и эффектов
02
Рекомендации по цифровым инструментам
04
Без навязанных решений — только по делу

Статьи на тему

Что будет, если не продлить коробку Битрикс24 вовремя: последствия и восстановление лицензии

Что будет, если не продлить коробку Битрикс24 вовремя: последствия и восстановление лицензии

Коробочная версия Битрикс24 — это удобство работы на собственном сервере и полный контроль над данными. Но у такого формата есть ключевое условие: ежегодное...
#Битрикс24 #Коробочная версия #Лицензия Битрикс24 #Продление лицензии #Блокировка портала #Вендинговый бизнес #CRM для вендинга #Автоматизация вендинга #Управление вендинговыми автоматами #Поддержка #Горячая линия #Поддержка24 #Чат с техподдержкой #Помощь #перенос чатов #перенос чатов из облака в коробку
CRM-система для управления вендинговым бизнесом на базе Битрикс24

CRM-система для управления вендинговым бизнесом на базе Битрикс24

Автоматизация сегодня становится ключевым фактором конкурентоспособности любого бизнеса. Если раньше достаточно было просто контролировать продажи и в...
#Битрикс24 #Коробочная версия #Лицензия Битрикс24 #Продление лицензии #Блокировка портала #Вендинговый бизнес #CRM для вендинга #Автоматизация вендинга #Управление вендинговыми автоматами #Поддержка #Горячая линия #Поддержка24 #Чат с техподдержкой #Помощь #перенос чатов #перенос чатов из облака в коробку
"Горячая линия" Битрикс24 на практике: как устроена поддержка

"Горячая линия" Битрикс24 на практике: как устроена поддержка

Сколько бы автоматизации ни было в CRM, рано или поздно любая команда сталкивается с вопросом «Куда писать, если что-то пошло не так?». Для пользователей...
#Битрикс24 #Коробочная версия #Лицензия Битрикс24 #Продление лицензии #Блокировка портала #Вендинговый бизнес #CRM для вендинга #Автоматизация вендинга #Управление вендинговыми автоматами #Поддержка #Горячая линия #Поддержка24 #Чат с техподдержкой #Помощь #перенос чатов #перенос чатов из облака в коробку
Битва за чаты: как перенести чаты из облака в коробку за 2 недели и не потерять данные

Битва за чаты: как перенести чаты из облака в коробку за 2 недели и не потерять данные

Компании, активно использующие Битрикс24, понимают, насколько важна информация в рабочих чатах: переписка с клиентами, счета, отгрузки, файлы. Особенн...
#Битрикс24 #Коробочная версия #Лицензия Битрикс24 #Продление лицензии #Блокировка портала #Вендинговый бизнес #CRM для вендинга #Автоматизация вендинга #Управление вендинговыми автоматами #Поддержка #Горячая линия #Поддержка24 #Чат с техподдержкой #Помощь #перенос чатов #перенос чатов из облака в коробку

Поделиться RDN Group







Стать клиентом Стать
клиентом