Чтобы определить роли и права в приложении, перечислите рабочие действия, укажите доступные каждой роли данные и запишите разрешения в матрицу. Затем проверьте не только разрешённые действия, но и запреты. В результате Вы получите понятные правила для разработчика и набор приёмочных проверок, а не неопределённое пожелание «администратор видит всё, остальные — своё».

Определение прав через рабочие действия, область данных и проверки

Чем роль отличается от входа в приложение

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

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

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

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

Как собрать список действий и данных

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

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

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

Полезный черновик выглядит так: «оператор может изменить комментарий назначенной ему незавершённой заявки своей организации; не может изменить цену и ответственного». Здесь есть действие, объект, область данных и условие. Разработчику не нужно угадывать, что автор документа подразумевал под фразой «оператор работает с заявками».

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

Правило доступа складывается из роли, действия, области данных и состояния записи
Названия роли недостаточно: правило должно отвечать, с какими данными и при каких условиях можно работать

Как заполнить матрицу доступа

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

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

ДействиеНаблюдательОператорКоординатор
Прочитать заявкуРазрешённая областьНазначенные емуСвоя команда
Изменить комментарийНетСвоя незавершённая заявкаЗаявка своей команды
Назначить исполнителяНетНетВ пределах команды
Изменить чужую организациюНетНетНет
Выгрузить записиНетНетТолько согласованные поля и область

Замените «разрешённая область» и «своя команда» конкретными определениями до реализации. Не оставляйте пустые клетки: они означают нерешённый вопрос, а не разрешение. Для исключения укажите основание, срок и ответственного за согласование. Структура таблицы должна позволять увидеть исключение при следующем обновлении.

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

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

Где проводить проверку разрешений

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

Рекомендации OWASP по авторизации включают минимально необходимые привилегии, запрет по умолчанию и проверку прав на каждом запросе. Для владельца проекта практический вопрос звучит так: «Будет ли отказ, если к действию обратиться без разрешения, минуя обычную кнопку?» Проверка интерфейса должна сопровождаться проверкой результата запроса.

Отдельно обсудите публичные данные. Статья, открытая демонстрация или общедоступный каталог могут не требовать входа. Закрытые документы, записи клиента и административные действия имеют другие правила. Нельзя объявлять весь сайт закрытым только потому, что на нём есть кабинет, и нельзя считать кабинет безопасным только потому, что сайт использует HTTPS.

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

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

Как проверить запреты на учебных данных

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

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

OWASP WSTG рассматривает проверки между пользователями и ролями, а также доступ без входа и после выхода. Переносите метод на согласованный учебный сценарий. Для проверки ограничения «только свои записи» нужны два тестовых пользователя одной роли; для ограничения «не может назначать» — сравнение разных ролей.

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

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

Четыре проверки запретов: другая запись, другая роль, выход из аккаунта и закрытый экспорт
Успешная приёмка подтверждает разрешённые действия и отсутствие запрещённых результатов

Как поддерживать права после изменения процесса

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

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

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

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

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

Чек-лист согласования ролей

Используйте чек-лист как напоминание о результатах обсуждения. Он сохраняет отметки в браузере и не проверяет сервер или учётные записи. Заполненная шкала не означает, что приложение прошло аудит. Для каждого пункта должны существовать правило, ответственный или реальный результат согласованного теста.

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

Частые вопросы

Можно ли дать одному человеку несколько ролей

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

Нужна ли роль администратора в первом выпуске

Зависит от задач управления. Не создавайте полный доступ по умолчанию. Сначала перечислите необходимые административные действия и отделите их от обычной работы.

Достаточно ли сложного адреса документа

Нет, адрес не заменяет согласованного разрешения. Для закрытого документа нужно проверить, получает ли доступ пользователь, которому это не разрешено, даже если ссылка ему известна.

Можно ли определить права только по отделу

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

Кто должен подтвердить матрицу

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

Что делать с неясным разрешением

Отметить его как нерешённое и не включать до согласования. Запишите вопрос и ответственного. Пустая клетка не должна случайно превратиться в разрешение при разработке.