Дополнение
Проект получил другое название: cute chat -> nice pea chat
Сокращения:
nice pea chat - нпс / проект / npc
permission set - набор прав / пермишны / ps
chat - чат / беседа
Авторизация:
Что было придумано
Планировалось реализовать авторизацию с помощью PS, которые должно были работать примерно так:
Клиент отправляет запрос - хочет выполнить действия X, оно выполнится если один из его PS разрешает его.
Т.е. PS это роль, которая дает право пользователь на выполнение определенных действий.
Зачем нужна авторизация нам
В первую очередь - модерация чатов
Гибкость для создания своих "миров" как в дискорде
Посмотрим какие подходы существуют
RBAC - Управление доступом на основе ролей
Данный подход предполагает использование ролевой системы доступа, где права пользователей определены на сновании должности, уровня полномочий, ответственности, потребностей согласно обозначенным задачам
ABAC - управление доступом на основе атрибутов
Более расширенный подход, где в качестве разрешения доступа выступает использование определенных атрибутов. Это могут быть атрибуты местоположения пользователя, например определённый регион. Это могут быть атрибуты времени, когда доступ разрешён в определённые часы, дни или на определённый период.
Новый вариант авторизации
Пользователи будут составлять правила, используя строительные блоки:
- action / действие
- название
- subject
- role / роль
- id
- название (оно и определяет приоритет)
- priority / приоритет будет определяться сортировкой
Роли как в дискорде!
Пусть этот функционал будет называться "пермишенами"!
В БД отразим авторизацию так:
role ( id int name string permissions []int )
enum Permission ( id int name string # <-- наверное будет локализация, так что без этого поля обойдемся )
А ограничения будут отражаться в коде.