FAQ: видимость кнопки «Поставить отсутствие» в профиле¶
Тип: FAQ для поддержки Источник тикетов: «Отображение кнопки "Поставить отсутствие"», «Не отображается Причина отсутствия»
1. Симптомы¶
Пользователь спрашивает: - «Не вижу кнопку "Поставить отсутствие" в профиле коллеги» - «Раньше мог ставить отсутствие за другого, теперь не могу» - «Не отображается причина отсутствия в профиле»
2. Матрица видимости¶
Кнопка видна, если выполняется условие 1 ИЛИ условие 2 (оба подпункта одновременно):
| # | Условие | Где настраивается | Проверка |
|---|---|---|---|
| 1 | Просматривающий — Администратор системы (God) | Свойства пользователя → «Является администратором» | IsUserGod() |
| 2а | У владельца профиля есть право «Создать задачу» хотя бы в одной календарной категории хотя бы одной своей группы | Права группы на категории | наличие права «Создать задачу» в calendar-категориях групп владельца |
| 2б | Просматривающий смотрит свой профиль ИЛИ имеет спецправо SETABSENCE |
Свойства пользователя → Специальные права → SETABSENCE |
userId == profileOwnerId || CheckSpecialPermission("SETABSENCE") |
Условие 2 срабатывает только при одновременном выполнении 2а И 2б.
Схема проверки¶
Администратор? ─────────────────────── ДА → кнопка ВИДНА
│
НЕТ
│
У владельца профиля есть право
«Создать задачу» в calendar-категории
хотя бы одной группы? ──────────────── НЕТ → кнопка СКРЫТА
│
ДА
│
Свой профиль ИЛИ есть SETABSENCE? ──── НЕТ → кнопка СКРЫТА
│
ДА
│
кнопка ВИДНА
3. Проверки 1-й линии¶
- Просматривающий — администратор? — если да, кнопка всегда должна быть видна. Нет → переходим к п.2.
- Чужой профиль — проверить последовательно:
- У владельца профиля есть право «Создать задачу» хотя бы в одной календарной категории хотя бы одной своей группы? (SQL-запрос в разделе 5) — если нет, кнопка скрыта независимо от остального.
- Просматривающий имеет спецправо
SETABSENCE? (AdminSPA → Свойства пользователя → Специальные права) — если есть и условие выше выполнено, кнопка должна быть видна. - Свой профиль — если просматривающий смотрит свой профиль и у него самого есть право «Создать задачу» в хотя бы одной календарной категории — кнопка видна.
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— настройки типов групп