Перейти к содержимому

Видимость записей

Из этой страницы вы узнаете:

  1. какие уровни видимости есть у записи в организации и кто видит каждый;
  2. какую видимость получает новая запись;
  3. как видимость поменять и почему обойти правило через агента нельзя.
ВидимостьВ кабинетеЗначение в APIКто видит
Только автор«только мне»authorТолько автор. Это черновик: его не видят ни руководитель, ни администратор, пока автор работает в организации
Отдел«отделу»unitЛюди узла записи и всех узлов ниже; руководители и администратор, в чьё поддерево входит этот узел
Проект«проекту»projectДействующие участники организации, работающие в проекте записи, в том числе подрядчики. Ключ, привязанный к другому проекту, такую запись не находит
Вся организация«всей организации»organizationВсе действующие участники организации, кроме подрядчиков

Исключения для ролей:

  • подрядчик видит только свои записи и записи с видимостью «проект»;
  • аудитор не видит ни одной записи;
  • человек, которого увольняют или уже уволили, а также человек с истёкшим сроком доступа, не видит ничего;
  • получатель знаний уволенного сотрудника видит все его записи, включая черновики, — см. Увольнение.

Видимость ставит сервер при remember, агент её не выбирает:

Кто сохраняетВидимость новой записи
Сотрудник, руководитель, администратор«отделу» — узел, к которому прикреплён автор
Подрядчик«проект»

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

Правило превращается в условие SQL-запроса и применяется внутри запроса, а не фильтром после него. Это сделано на всех путях чтения:

  • search и граф связей в результатах поиска;
  • validate_memory;
  • forget — нельзя удалить запись, которую вы не видите;
  • кабинет: вкладка «Память» организации и «Знания сотрудников»;
  • архивариус — он связывает новую запись только с записями, которые видит её автор.

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

Агент Бориса ── search("как выкатывать staging") ──► MMW
│
SQL: записи организации, где
(автор = Борис)
ИЛИ видимость = «организация»
ИЛИ видимость = «проект»
ИЛИ (видимость = «отдел» И узел ∈ Бэкенд, Разработка, Северный ветер)
│
◄──────────────── только разрешённые записи ──────────┘

В «Северном ветре» четыре записи:

ЗаписьАвторВидимость
«Staging выкатывается через systemd-юнит app-staging»Аннаотделу (Бэкенд)
«Кандидат на замену очереди — NATS, сравниваю»Бористолько автор
«API клиента X: лимит 100 запросов в минуту»Верапроект
«Релизы — по вторникам»Дмитрийвся организация

Кто что найдёт:

ЧеловекStagingNATSЛимит APIРелизы
Борис (сотрудник, Бэкенд)дада, свойда, если работает в проектеда
Анна (руководитель Бэкенда)да, своянетда, если работает в проектеда
Дмитрий (администратор, корень)данетда, если работает в проектеда, своя
Вера (подрядчик)нетнетда, своянет
Глеб (аудитор)нетнетнетнет

Черновик Бориса про NATS не видят ни Анна, ни Дмитрий. Если Бориса уволят и передадут знания Анне, она увидит и этот черновик.

Знания уволенного сотрудника. Получатель открывает вкладку «Знания сотрудников» → «Открыть записи» и для каждой записи выбирает в списке «Кому видно»: только мне, отделу, проекту или всей организации. Каждая такая смена попадает в журнал.

Свои записи. Сервер разрешает автору менять видимость своих записей через API кабинета; отдельного переключателя для своих записей в интерфейсе кабинета пока нет. Запрос отправляется от имени вошедшего в кабинет пользователя, организация указывается заголовком X-MMW-Space:

Сделать свою запись черновиком
PATCH /api/v1/org/memories/4d428a41-e7b0-4f81-a886-f40c6f6c766c
X-MMW-Space: <ID организации>
Content-Type: application/json
{ "visibility": "author" }

Ответ:

{ "id": "4d428a41-e7b0-4f81-a886-f40c6f6c766c", "visibility": "author", "org_node_id": "…" }

Допустимые значения visibility: author, unit, project, organization. С полем "to_my_unit": true запись переносится в ваш текущий узел — так «отделу» начинает означать ваш новый отдел. Менять можно только свои записи и записи, переданные вам при увольнении; на чужую запись сервер ответит memory_not_found.