Change language

rp-community

Назначение

Структура форума и владение: разделы, темы, кто их создал и кто может их видеть. Обсуждение внутри темы находится не здесь — тема содержит threadId, а сообщения хранятся в rp-threads.

Граница ответственности

Владеет разделами и темами. Не вызывает rp-threads или какой-либо другой репозиторий: createTopic создаёт threadId и возвращает его, а вызывающая сторона сама регистрирует ветку и записывает первое сообщение.

Идентификация и авторство

createdBy никогда не принимается от вызывающей стороны. Он считывается из проверенного токена через getCurrentWorkspaceContext(), который messaging-backend предпочитает любым данным, заявленным в конверте. Идентификаторы тем и веток по той же причине создаются здесь — идентификатор, который может выбрать клиент, можно украсть, а таблица тегов доступа не хранит тип объекта, чтобы обнаружить такое столкновение.

Видимость

Разделы и темы содержат столбец visibility (public | authenticated | private | tagged), и новая тема наследует значение своего раздела, если только не запрашивает более узкое. Теги, лежащие в основе tagged, должны находиться в общей связи access_tags, описанной в access-control.md; эта часть ещё не реализована, поэтому сейчас значение visibility сохраняется, но не применяется.

Блокировка

touchTopicActivity — единственное место, где можно обеспечить блокировку: rp-threads принимает сообщение, не зная о существовании тем, поэтому экран вызывает этот метод после публикации и считает отказ неудачной публикацией.

Прямые зависимости модуля

  • back-core, nrpc, g-community

Принадлежность решению

  • communications

Исходный код

modules/repositories/communications/rp-community