users
Данные пользователей. Структура:
Поле | Тип | Описание |
---|---|---|
_id | bsonId | Идентификатор MongoDb |
login | string | Логин пользователя |
passwordHash | string | sha512(password + salt) |
passwordSalt | string | Случайная строка |
roles | array[string] | Список ролей пользователя |
unread | array[Object] | Непрочитанные диалоги |
Струкрута элементов массива inbox
Поле | Тип | Описание |
---|---|---|
dialogId | bsonId | Идентификатор диалога |
messageIds | array[string] | Массив идентификаторов непрочитанных сообщений |
roles
Возможные роли пользователей. Структура:
Поле | Тип | Описание |
---|---|---|
_id | bsonId | Идентификатор MongoDb |
name | string | Отображаемое название роли |
permissions | Object | Словарь разрешений данной роли |
Структура элемента permissions
Поле | Тип | Описание |
---|---|---|
uri (ключ) | string | Идентификатор действия в коллекции actions |
allowed | boolean | Доступность действия пользователю |
restrictions | Object | Словарь ограничений на параметры действия (JSON-schema) |
Структура элементов массива restrictions
Поле | Тип | Описание |
---|---|---|
additionalProperties | boolean | Допустимы ли дополнительные поля |
properties | Object | Ограничения на поля проверяемого объекта |
required | array[string] | Список обязательных полей |
От клиента приходит:
- Название роли
- Словарь разрешений (средство для конструирования реализовано на клиенте)
При добавлении дополнительных действий (например, при расширении функционала) действие считается запрещенным для всех. По этой причине начальная настройка ролей проводится вручную, чтобы дать пользователю доступ к интерфейсу создания ролей.
Состоит из двух запросов:
- Получение старых значений роли
- Обновление значений
Ответ на первый запрос возвращает весь документ из коллекции вместе со всеми разыменованными полями.
Второй запрос отличается от добавления роли лишь наличием идентификатора.
Для каждого запроса к серверу проверяется существование действия с таким запросом (поиск по uri). Если действие не найдено - запрос считается некорректным, и возвращается ошибка.
В случае, если действие найдено, проверяется значение allowed
соответствующей пары ключ:значение словаря permissions
. Если значение равняется false
- действие запрещается, возвращается код 403
.
Если действие разрешено, то проверяется элемент restrictions
- ограничения на проверямое поле (тип, значение).
Допустимо только в том случае, если не существует пользователей с такой ролью.
dialogs
Созданные диалоги между группами пользователей. Структура:
Поле | Тип | Описание |
---|---|---|
_id | bsonId | Идентификатор MongoDb |
title | string | Отображаемое название |
createdAt | date | Дата создания |
parties | array[Object] | Массив сторон переписки |
messages | array[Object] | Архив сообщений диалога |
Структура элементов массива parties
:
Поле | Тип | Описание |
---|---|---|
title | string | Отображаемое наименование стороны |
users | array[bsonId] | Массив идентификатор участников стороны |
Структура элементов массива messages
:
Поле | Тип | Описание |
---|---|---|
id | string | Уникальный идентификатор сообщения |
timestamp | date | Время отправки сообщения |
content | string | Содержание сообщения |
От клиента приходит:
- Название
- Массив идентификаторов пользователей
- Мабор правил и названий для групп, эти правилами задаваемых
Все правила преобразуются в списки идентификаторов удовлетворяющих им пользователей. Если для правила не найдено ни одного участника, то возвращается ошибка.
Получившиеся списки (и каждый пользователь, заданный отдельно) образуют стороны созданного диалога. Ко всем пользователям диалога в поле unread
добавляется объект с идентификатором диалога и пустым массивом идентификаторов сообщений.
У всех участников диалога удаляется из поля unread
объект, соответствующий идентификатору диалога, удаляется документ, соответствующий диалогу.
От клиента приходит:
- Текст сообщения
- Идентификатор диалога
Сообщению присваивается уникальный идентификатор, и оно добавляется в массив messages соответствующего диалога.
Поисходит попытка отправить уведомления всем пользователям в диалоге через Websocket (идентификатор подключения хранится в инормации сессии в Redis). В случае, если отправка проходит неудачно (пользователь не в сети), идентификатор диалога и сообщения дописывается в поле массив unread
соответствующего пользователя.
От клиента приходит:
- Текст новости в Markdown
- Список ролей или поле
public
Если заполнено и поле public
, и список ролей, необходимых для просмотра - возвращается ошибка. Поле HTML заполняется при помощи marked
, новость сохраняется в коллекции.
От клиента приходит:
- Запрос на получение исходника старой новости в Markdown и старых ролевых правил
- Запрос на редактирование с новыми правилами и новым кодом в Markdown
В ответ на первый запрос приходят три поля: _id
, markdown
и public/canSee
.
При обработке второго запроса ожидается тот же набор полей. Если поле _id
отсутствует - возвращается ошибка. Если отсутствует какое-либо из полей оставшихся полей - считается, что эти поля не требуют изменений. Если приходит поле public
или canSee
, то перед записью их в документ стираются оба старых поля public/canSee
. Если в запросе приходит оба поля public/canSee
- возвращается ошибка.
От клиента приходит:
- Идентификатор новости
Если идентификатор не найден в базе - возвращается ошибка.
news
Элементы новостной ленты.
Поле | Тип | Описание |
---|---|---|
_id | bsonId | Идентификатор MongoDb |
markdown | string | Исходный текст новости в Markdown |
html | string | Итоговый код новости в HTML |
public | boolean | Общедоступность новости |
canSee | array[string] | Список ролей, которым видно новость |
В случае, если в новости поле public
имеет значение true
, поле canSee
игнорируется.
events
События кафедры.
Поле | Тип | Описание |
---|---|---|
_id | bsonId | Идентификатор MongoDb |
title | string | Отображаемое наименование события |
beginDate | date | Дата начала события |
endDate | date | Дата окончания события |
groups | array[Object] | Группы участников события |
attachments | array[Object] | Массив путей к материалам события |
dialogId | string | Идентификатор диалога события |
Структура элементов массива groups
:
Поле | Тип | Описание |
---|---|---|
title | string | Отображаемое название группы |
restrictions | array[Object] | Массив правил, задающих группу |
Структура элементов массива attachments
:
Поле | Тип | Описание |
---|---|---|
title | string | Отображаемое наименование приложения |
path | string | Путь к файлу относительно корня [файловой директории] |
todo
todo
todo
todo