Перейти к содержанию

FAQ: видимость кнопки «Поставить отсутствие» в профиле

Тип: FAQ для поддержки Источник тикетов: «Отображение кнопки "Поставить отсутствие"», «Не отображается Причина отсутствия»

1. Симптомы

Пользователь спрашивает: - «Не вижу кнопку "Поставить отсутствие" в профиле коллеги» - «Раньше мог ставить отсутствие за другого, теперь не могу» - «Не отображается причина отсутствия в профиле»

2. Матрица видимости

Кнопка видна, если выполняется условие 1 ИЛИ условие 2 (оба подпункта одновременно):

# Условие Где настраивается Проверка
1 Просматривающий — Администратор системы (God) Свойства пользователя → «Является администратором» IsUserGod()
У владельца профиля есть право «Создать задачу» хотя бы в одной календарной категории хотя бы одной своей группы Права группы на категории наличие права «Создать задачу» в calendar-категориях групп владельца
Просматривающий смотрит свой профиль ИЛИ имеет спецправо SETABSENCE Свойства пользователя → Специальные права → SETABSENCE userId == profileOwnerId || CheckSpecialPermission("SETABSENCE")

Условие 2 срабатывает только при одновременном выполнении 2а И 2б.

Схема проверки

Администратор? ─────────────────────── ДА → кнопка ВИДНА
      │
     НЕТ
      │
У владельца профиля есть право
«Создать задачу» в calendar-категории
хотя бы одной группы? ──────────────── НЕТ → кнопка СКРЫТА
      │
     ДА
      │
Свой профиль ИЛИ есть SETABSENCE? ──── НЕТ → кнопка СКРЫТА
      │
     ДА
      │
кнопка ВИДНА

3. Проверки 1-й линии

  1. Просматривающий — администратор? — если да, кнопка всегда должна быть видна. Нет → переходим к п.2.
  2. Чужой профиль — проверить последовательно:
  3. У владельца профиля есть право «Создать задачу» хотя бы в одной календарной категории хотя бы одной своей группы? (SQL-запрос в разделе 5) — если нет, кнопка скрыта независимо от остального.
  4. Просматривающий имеет спецправо SETABSENCE? (AdminSPA → Свойства пользователя → Специальные права) — если есть и условие выше выполнено, кнопка должна быть видна.
  5. Свой профиль — если просматривающий смотрит свой профиль и у него самого есть право «Создать задачу» в хотя бы одной календарной категории — кнопка видна.

4. Что запросить у клиента

  • ID пользователя, который не видит кнопку
  • ID пользователя, для которого пытаются поставить отсутствие
  • Скриншот профиля (убедиться, что кнопка действительно отсутствует)

5. База данных

-- Диагностика видимости кнопки «Поставить отсутствие»

-- 1. Есть ли у просматривающего (userA) спецправо SETABSENCE
select *
from dbo.SpecialPermissions sp
where sp.UserID = @userA_id
  and sp.PermissionName = 'SETABSENCE';

-- 2. Есть ли у владельца профиля (userB) право «Создать задачу»
--    хотя бы в одной календарной категории хотя бы одной своей группы
select top 1
    g.GroupID,
    s.SubCategoryID,
    s.SubCategoryName
from dbo.UsersGroups ug
         join dbo.Groups g on g.GroupID = ug.GroupID
         join dbo.GroupSubcatActions gsa on gsa.GroupID = g.GroupID
         join dbo.SubCategories s on s.SubCategoryID = gsa.SubCategoryID
         join dbo.Categories c on c.CategoryID = s.CategoryID
where ug.UserID = @userB_id
  and c.IsCalendar = 1     -- только календарные разделы
  and gsa.ActionID = 1;    -- ActionID = 1 → «Создать задачу»

6. Когда эскалировать

  • Все условия выполнены, но кнопка не видна → баг во фронтенде, эскалировать на L3
  • Кнопка видна, но при нажатии ошибка → эскалировать на L2 (backend: UserAbsenceService)

7. Связанные документы

  • docs/domains/users-and-groups/backend.md — UserAbsenceService, права
  • faq-absence-button-visibility.md — настройки типов групп