Тот, кто отправил карточку, не может согласовать её сам

Разделение полномочий проверяет регулятор, и проверяет он не регламент, а экран. Поэтому права здесь — не «роль администратора» и не галочка «редактирование», а перечисляемая модель: объект, тип объекта, действие. Двенадцать типов объектов защиты, пять действий, двадцать семь именованных действий пользователя, права до отдельной вкладки карточки — и меню, которое собирается из выданных прав, а не показывается серым.

Разделение полномочий — на уровне отдельного действия

Обычная уязвимость самописных реестров: у сотрудника есть право «редактировать», и внутри него спрятано всё — и отправить, и согласовать, и закрыть. Один человек проводит запись по всему маршруту, а в истории остаётся одна фамилия. Здесь так не получится.

Два разных права вместо одного «редактировать»

«Отправить карточку на согласование» и «Согласовать карточку или отправить на доработку» — самостоятельные именованные действия. Их выдают разным сотрудникам. Сверх того кнопки согласующего вообще не появляются на экране, пока карточка не находится в статусе «На согласовании»: даже обладатель права не может согласовать то, что ему ещё не отправили.

Кто что может на каждом этапе карточки
Этап карточки Автор карточки Согласующий
Созданвзять в работу, редактироватькнопок согласования нет
В работередактировать, отправить на согласованиекнопок согласования нет
На согласованииредактирование закрытосогласовать или отправить на доработку
На доработкередактировать, отправить повторнокнопок согласования нет
Согласованоотправить на согласование сновакнопок согласования нет

Возврат на доработку не проходит без комментария, а каждая смена этапа записывается в историю с автором и временем.

Модель разрешений: объект, тип объекта, действие

Разрешение — это тройка. Не «роль с описанием на словах», а набор строк, который выгружается и согласуется с владельцем процесса. Типов объектов защиты двенадцать, действий пять: чтение, запись, добавление, удаление, выполнение.

Двенадцать типов объектов защиты и доступные над ними действия
Тип объекта защитыДействияЧто этим разграничивают
Реестрычтение, запись, добавление, удалениекто вообще видит реестр и кто в нём заводит записи
Шаблонычтение, запись, добавление, удалениекто меняет состав полей карточек для всех
Справочникичтение, запись, добавление, удалениекто добавляет значения, по которым потом собирается отчётность
Пункты менючтениекакие разделы вообще появятся у сотрудника
Представлениячтениедоступ к настраиваемым видам реестров
Действиявыполнение27 именованных действий жизненного цикла
Отчётывыполнениекто может выгрузить данные наружу
Риск — вкладки карточкичтениешесть вкладок выдаются по отдельности
Лимит — вкладки карточкичтениепять вкладок выдаются по отдельности
Нарушение — вкладки карточкичтениепять вкладок выдаются по отдельности
Обработка данныхчтениедоступ к журналам уведомлений и загрузок
Настройки приложениячтение, запись, добавление, удалениерасписания задач, дашборды, статусная модель

Двадцать семь именованных действий пользователя

Каждое действие ниже выдаётся отдельно. Это и есть материал для матрицы разделения полномочий: её не надо придумывать заново — достаточно решить, кому какие строки.

Движение карточки по маршруту 4 действия
  • Взять карточку в работу
  • Отправить карточку на согласование
  • Согласовать карточку или отправить на доработку
  • Восстановить карточку
Закрытие и подтверждение по существу 9 действий
  • Переоценить риск
  • Подтвердить устранение нарушения
  • Закрыть манипулирование
  • Завершить задачу
  • Завершить проверку
  • Пересмотреть конфликт интересов
  • Подтвердить исключение конфликта интересов
  • Переоткрыть конфликт интересов
  • Подтвердить отправку ответа на запрос или предписание
Административные дела 2 действия
  • Подтвердить рассмотрение дела
  • Подтвердить вынесение решения
Отчётность и выгрузка наружу 8 действий
  • Отправить на первую линию
  • Отправить на вторую линию
  • Подтвердить отправку в надзорный орган
  • Переделать отчет
  • Сформировать отчет по реестру предписаний и неофициальных запросов
  • Сформировать отчет контролера
  • Сформировать отчет о существенных событиях по регуляторным рискам
  • Автоматическая фильтрация по существенным регуляторным рискам
Представления и загрузка данных 4 действия
  • Настроить представление
  • Удалить или очистить представление
  • Импорт данных о манипулировании
  • Импорт запросов и предписаний

Права до отдельной вкладки карточки

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

Вкладки карточек как объекты защиты
КарточкаВкладки, выдаваемые отдельно
Рисксодержание · нарушения · корректирующие мероприятия · инциденты · история переоценки · комментарии
Лимитсодержание · корректирующие мероприятия · инциденты · история переоценки · комментарии
Нарушениесодержание · мероприятия · инциденты · история изменений · комментарии

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

Меню собирается из прав — попробуйте сами

Пункт меню отображается только при наличии права на чтение соответствующего объекта. Узел, у которого не осталось доступных потомков, из дерева выбрасывается целиком: сотрудник не видит серых разделов, по которым бесполезно кликать. Снимите и поставьте права — дерево слева пересоберётся.

Сборка дерева навигации по выданным правам

Отметьте право на чтение — и посмотрите, что появится в меню.

Выданные права на чтение

Что увидит сотрудник в меню

  • Реестры
    • Реестр регуляторных рисков
    • Реестр запросов и предписаний
    • Реестр конфликтов интересов
  • Отчётность
    • Реестр отчётных форм
    • Реестр отчётности
    • Реестр отчётов
  • Внутренние отчёты
    • Отчёт 449
    • Реестр регуляторных рисков
  • Справочники
    • 47 справочников
  • Архивы
    • Архив регуляторных рисков
  • Обработка данных
    • Журнал почтовых уведомлений
  • Настройки приложения
    • Задачи по расписанию

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

Внешнему проверяющему — срез, а не учётная запись во всей системе

Когда аудитору или проверяющему нужно показать данные, обычно происходит одно из двух: либо ему выгружают файл, который потом живёт своей жизнью, либо заводят учётную запись «с ограничениями», про которые все забывают. В продукте для этого заведены отдельные объекты: реестр регуляторных рисков для внешнего проверяющего и реестр регуляторных рисков для внешнего пользователя — оба только на чтение.

  • Это отдельные реестры, а не фильтр над общим: «забыть применить» его нельзя.
  • Доступ выдаётся правом на чтение конкретного объекта, а не набором исключений.
  • Остальные разделы у такого пользователя не отображаются вовсе — меню собирается из его прав.

Роли и подразделения: ролевая модель — ваша

Разрешения приходят из внешнего модуля безопасности, поэтому роли вы задаёте под свою оргструктуру, а не подгоняете структуру под продукт. Ниже — ориентир, от которого удобно отталкиваться: какие наборы прав обычно ложатся на какие подразделения.

Ориентировочное соответствие ролей подразделениям
Кто в вашей организацииЧто обычно выдаётсяЧего обычно не выдаётся
Специалист департамента внутреннего контроляведение реестров, «Отправить на согласование», настройка своих представлений«Согласовать или отправить на доработку», подтверждение отправки наружу
Руководитель подразделения внутреннего контроля, контролёр«Согласовать или отправить на доработку», формирование отчётов, подтверждение отправки в надзорный органправа заводить и вести карточки, которые он же согласует
Вторая линия контроля, риск-подразделение«Отправить на вторую линию», чтение реестров и вкладок по существуправа первой линии по тем же отчётам
Смежное бизнес-подразделениечтение отдельных реестров и отдельных вкладок карточкикомментарии, инциденты, журналы, настройки
Внешний проверяющий, аудиторчтение отдельного реестра «только чтение»всё остальное — разделы просто не отображаются
Администратор системынастройки приложения: задачи по расписанию, дашборды, статусная модельдействия жизненного цикла по существу — согласование и отправка наружу

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

Что это даёт ИТ-директору

  • Аутентификация вынесена наружу: рабочий режим — OpenID Connect через Keycloak, с проверкой токена по набору ключей провайдера. Отдельного хранилища паролей продукт не заводит.
  • Разрешения приходят по REST из внешнего модуля безопасности вместе с идентификатором сотрудника. Управление доступом остаётся в вашем контуре управления доступом, а не расползается по прикладным системам.
  • Модель прав перечисляема: 12 типов объектов, 5 действий, 27 именованных действий пользователя, вкладки карточек. Матрицу можно выгрузить и согласовать, а не пересказывать.
  • События безопасности журналируются; экран отказа в доступе — отдельная страница, а не «пустой раздел без объяснений». Таймаут сессии — 60 минут.
  • Есть встроенный режим аутентификации по файлу пользователей — он предназначен для разработки и на продуктивном контуре не используется. Пишем прямо, чтобы это не всплыло на аудите.

Проверить разделение полномочий на стенде

Заводим двух пользователей с разными правами и показываем, что видит каждый: меню, кнопки на карточке, доступные вкладки и реестр «только чтение».