недавно,В интервью другу задали вопрос, как спроектировать «Разрешениясистема». Мы заметили, что многие бэкэнды в настоящее время используют политики контроля доступа RBAC (включая некоторые популярные платформы быстрой разработки Ruoyi). Эта стратегия работает путем предоставления персонажу Разрешения.,Затем дайте пользователю Назначение роли.,Добиться контроля доступа к ресурсам системы. сегодня,Мы подробно объясним Разрешениясистему на основе RBAC.
RBAC-SYS.jpg
RBAC (управление доступом на основе ролей) — это модель управления доступом, основной концепцией которой является назначение разрешений на основе ролей. Целью разработки этой модели является упрощение управления доступом к системным ресурсам и повышение безопасности и удобства обслуживания системы.
Внедрение RBAC обычно включает в себя следующие этапы:
RBAC-MODULE.png
Вот некоторое описание системы разрешений RBAC:
В системе RBAC роль — это набор взаимосвязанных разрешений. Роль может представлять функцию, должность или ответственность пользователя. Например, ролями могут быть системный администратор, обычный пользователь, аудитор и т. д. В системах разрешений некоторых предприятий принятая ими трехсторонняя система разрешений контролируется с помощью ролей и типов пользователей.
Разрешения представляют собой права доступа к системным ресурсам или операциям, включая различные уровни доступа, такие как чтение, запись, выполнение и другие операции. Обычно разрешения связаны с конкретными задачами или действиями, такими как доступ к определенным файлам, изменение информации о пользователе и т. д. В нашей системе разрешений степень детализации разрешений обычно уточняется до уровня кнопок управления на странице. Некоторые системы также включают разрешения на доступ к данным, например, возможность доступа к данным текущего отдела и его подчиненных отделов или возможность просмотра данных только из определенной системы и т. д.
Пользователи получают соответствующие разрешения, назначаясь одной или нескольким ролям. Это упрощает управление разрешениями, поскольку больше нет необходимости напрямую назначать разрешения каждому пользователю, а нужно только управлять взаимосвязью между ролями и разрешениями.
Каждая роль связана с определенными разрешениями. Это означает, что когда пользователю назначается роль, он автоматически получает разрешения, связанные с этой ролью. Эта ассоциация может быть достигнута с помощью матрицы управления доступом или аналогичной структуры.
пользователь Авторизоватьсясистеманазад,Механизм управления сеансами отвечает за поддержание разрешения, связанного с ролью пользователя. Как только сессия закончится,Обычно срабатывает автоматический отзыв Разрешения. Обычно мы храним сеанс в Redis.,И установите время истечения срока действия для управления сеансом. Срок действия будет обновляться при посещении пользователем,Обеспечьте валидность сеанса.
Система RBAC обычно включает в себя функции аудита и мониторинга для регистрации действий пользователей, изменений решений и посещений системы. Это помогает обнаружить потенциальные проблемы безопасности и обеспечить соответствие требованиям.
Система RBAC позволяет динамически настраивать связь между ролями и разрешениями во время выполнения. Такая гибкость позволяет системе адаптироваться к меняющимся организационным структурам и потребностям бизнеса.
Интегрируя Разрешительную ассоциацию в роли, RBAC упрощает Разрешенияуправлять для крупных пользователей.
Модель RBAC обладает высокой гибкостью и может регулировать отношения между ролями и разрешениями в соответствии с потребностями организации.
Уменьшая необходимость напрямую назначать разрешения пользователям, RBAC снижает риски безопасности системы, вызванные неправильной авторизацией.
ER-диаграмма таблицы базы данных выглядит следующим образом:
RBAC-ER.png
Конкретная конструкция стола выглядит следующим образом:
Примечания к таблице: Таблица разрешений меню
Поле | тип | нулевой | по умолчанию | Комментарий |
---|---|---|---|---|
идентификатор (первичный ключ) | bigint | нет | Идентификатор меню | |
menu_name | varchar(50) | да | NULL | Название меню |
parent_id | bigint | да | 0 | отец Идентификатор меню |
order_num | int | да | 0 | Порядок отображения |
path | varchar(200) | да | адрес маршрутизации | |
component | varchar(255) | да | NULL | путь к компоненту |
query | varchar(255) | да | NULL | параметры маршрутизации |
is_frame | int | да | 1 | данет — внешняя ссылка (0да 1нет) |
menu_type | char(1) | да | тип меню (каталог M C, кнопка меню F) | |
visible | char(1) | да | 0 | Статус меню (0 показывает, 1 скрывает) |
status | char(1) | да | 0 | Статус меню (0 нормальный 1 отключенный) |
perms | varchar(100) | да | NULL | Идентификатор разрешения |
icon | varchar(100) | да | # | значок меню |
create_by | varchar(64) | да | Создатель | |
create_time | datetime | да | NULL | время создания |
update_by | varchar(64) | да | Программа обновления | |
update_time | datetime | да | NULL | Время обновления |
remark | varchar(500) | да | Примечание |
Примечания к таблице: Таблица с информацией о ролях
Поле | тип | нулевой | по умолчанию | Комментарий |
---|---|---|---|---|
идентификатор (первичный ключ) | bigint | нет | Идентификатор роли | |
role_name | varchar(30) | да | NULL | Имя персонажа |
role_key | varchar(100) | да | NULL | Строка разрешения роли |
status | char(1) | да | NULL | Статус персонажа (0 нормальный, 1 отключенный) |
del_flag | char(1) | да | 0 | Флаг удаления (0 означает существование, 2 означает удаление) |
create_by | varchar(64) | да | Создатель | |
create_time | datetime | да | NULL | время создания |
update_by | varchar(64) | да | Программа обновления | |
update_time | datetime | да | NULL | Время обновления |
remark | varchar(500) | да | NULL | Примечание |
Примечания к таблице: Таблица ассоциации ролей и меню
Поле | тип | нулевой | по умолчанию | Комментарий |
---|---|---|---|---|
идентификатор (первичный ключ) | bigint | нет | ||
role_id | bigint | да | NULL | Идентификатор роли |
menu_id | bigint | да | NULL | Идентификатор меню |
Примечания к таблице: Таблица информации о пользователе
Поле | тип | нулевой | по умолчанию | Комментарий |
---|---|---|---|---|
идентификатор (первичный ключ) | bigint | нет | ID пользователя | |
user_name | varchar(30) | да | NULL | Учетная запись пользователя |
nick_name | varchar(30) | да | NULL | Никнейм пользователя |
phonenumber | varchar(11) | да | номер телефона | |
password | varchar(100) | да | пароль | |
status | char(1) | да | 0 | Статус учетной записи (0 нормальный, 1 отключенный) |
del_flag | char(1) | да | 0 | Флаг удаления (0 означает существование, 2 означает удаление) |
create_by | varchar(64) | да | Создатель | |
create_time | datetime | да | NULL | время создания |
update_by | varchar(64) | да | Программа обновления | |
update_time | datetime | да | NULL | Время обновления |
remark | varchar(500) | да | NULL | Примечание |
Примечания к таблице: Таблица ассоциации пользователей и ролей
Поле | тип | нулевой | по умолчанию | Комментарий |
---|---|---|---|---|
идентификатор (первичный ключ) | bigint | нет | Идентификатор первичного ключа | |
user_id | bigint | да | NULL | ID пользователя |
role_id | bigint | да | NULL | Идентификатор роли |
Примечания к таблице: Таблица журнала входа в систему
Поле | тип | нулевой | по умолчанию | Комментарий |
---|---|---|---|---|
идентификатор (первичный ключ) | bigint | нет | Идентификатор доступа | |
user_id | bigint | да | NULL | ID пользователя |
user_name | varchar(50) | да | Учетная запись пользователя | |
ipaddr | varchar(128) | да | IP-адрес для входа | |
login_location | varchar(255) | да | Место входа | |
browser | varchar(50) | да | Тип браузера | |
os | varchar(50) | да | Операционная система | |
status | char(1) | да | 0 | Статус входа (0 успешный, 1 неудачный) |
msg | varchar(255) | да | Подсказка | |
login_time | datetime | да | NULL | время доступа |
Являясь надежным и мощным механизмом контроля доступа, система разрешений RBAC обеспечивает прочную основу для безопасности системы. Глубоко понимая основные концепции и принципы работы RBAC, мы можем лучше применять эту модель, чтобы гарантировать, что система достигает оптимальной производительности в управлении доступом, одновременно улучшая удобство обслуживания и гибкость системы. В некоторых системах введены такие функции, как временные роли и базовые роли, основанные на системе ролей RBAC, для дальнейшего повышения гибкости и адаптируемости RBAC.