canEditExecutors: те же люди, что в canEditRoute (в т.ч. gorbenko.pavel), могут править матрицу «Исполнение» во всех формах с фазой исполнения; блок виден им и пустым. Остальным исполнители по-прежнему только для чтения. Реестр особых прав обновлён. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
8.4 KiB
Особые права в портале — реестр
Здесь собраны все места, где кому-то выданы права сверх обычных. Обычные права такие: автор правит свою незавершённую заявку, согласующий или исполнитель решает на своём активном шаге.
Многие права пока выданы по email или по должности прямо в коде. Это временно: план — переехать на группы SharePoint. Этот файл нужен, чтобы при переезде, смене сотрудника или разборе «почему у него есть или нет кнопки» ничего не потерять.
Правило. Добавили, изменили или убрали особое право — поправьте таблицу ниже в том же коммите.
Сводная таблица
| Право | Кто | Как определяется | Где действует | Файл с проверкой |
|---|---|---|---|---|
| Удалять согласующих, которые ещё ждут очереди | Алтынай Бултурукова, Павел Горбенко | email в коде | Подбор, Приём, Реферальная рекомендация: и при составлении, и в поданной заявке | shared/approval/routeEditRights.ts → canEditRoute |
| Удалять любых согласующих при составлении заявки | те же (canEditRoute) |
email в коде | Все остальные формы с маршрутом согласования (отпуск, увольнение, 1С и т. д.); в поданной заявке — нет | shared/approval/routeEditRights.ts → composeRemoveRowRule |
| Добавлять и удалять исполнителей при составлении заявки | те же (canEditRoute) |
email в коде | Все формы, где в маршруте из админки есть фаза исполнения; в поданной заявке — нет | shared/approval/routeEditRights.ts → canEditExecutors |
| Заменять и удалять исполнителей, в том числе активного («На исполнении») | Алтынай Бултурукова | тот же email (canEditRoute) |
Только Заявка на подбор, матрица «Исполнение» | canEditRoute + forms/RecruitingSelection/RecruitingSelectionView.tsx |
| Править все поля заявки на своём активном шаге согласования (без вложений) | Алтынай Бултурукова | email в коде | Подбор, Приём (Реферальная рекомендация — нет) | shared/approval/fullEditRights.ts → canEditAllFields |
| Править оклад на ИС, оклад после ИС, «Отдел/Участок» на своём шаге согласования | Начальник расчётной группы (сейчас Ким Анна) | должность шага: «начальник/руководитель» + «расчет» | Заявка на приём | forms/RecruitingHire/approverRights.ts → canEditPayrollFields |
| Ставить дату приёма (2.2) | Активный исполнитель | роль в маршруте (шаг «Исполнение»), без проверки должности | Заявка на приём | forms/RecruitingHire/RecruitingHireView.tsx (hireDateEditable) |
| Править карту СКУД и сумму за обучение | Начальник отдела кадрового делопроизводства | должность шага: «начальник/руководитель» + «кадров» + «делопроизводств» | Обходной лист | forms/Clearance/approverRights.ts → canEditHrRecordsFields |
| Править парковочную карту | Начальник отдела подбора и адаптации | должность шага: «начальник/руководитель» + «подбор» + «адаптац» | Обходной лист | forms/Clearance/approverRights.ts → canEditParkingField |
| Видеть раздел «Отчёты» | Группа SP «Отчеты по заявкам» (Id 199) и всегда: Тришина М., Городецкий Т., Горбенко П., Сарниязова А. | группа SharePoint + email в коде | Боковое меню | shared/reports/reportsAccess.ts → hasReportsAccess |
| Видеть «Все заявки» типа (чужие тоже, только просмотр) | Список email для каждого типа | настраивается в админке approval-route, не в коде | Раздел «Все заявки» | shared/approval/requestTypeAccess.ts |
| Подавать заявки, пока действует заморозка | Группа SP «Тестирование» (Id 124) | группа SharePoint | Все замороженные формы (разморожены для всех: 1С, Подбор, Приём, Реферал, Рабочее место) | shared/ui/SubmitActions/SubmitActions.tsx (SUBMISSION_FROZEN, UNFROZEN_FORMS) + testerGroupAccess.ts |
Открывать формы «в разработке» (comingSoon) |
Группа SP «Тестирование» (Id 124) | группа SharePoint | Плитки и формы с comingSoon |
shared/useIsTester.ts, components/RequestGrid/RequestGrid.tsx, features/submit/SubmitFeature.tsx |
| Отладочная подмена личности (портал работает от имени другого сотрудника) | Тот, кто может править свойства веб-части на странице (владельцы или редакторы сайта) | поле в свойствах веб-части | Весь портал; на экране красная плашка | shared/impersonation.ts |
Как проверяются права по должности
Права «по должности» (приём, обходной лист) сравнивают ключевые слова в должности шага маршрута: это колонка Title строки согласования, её подставляет маршрут при планировании. Обязателен управленческий маркер «начальник»/«руководитель», иначе право получили бы рядовые сотрудники того же отдела.
Риск: опечатка или переформулировка должности в кадровом справочнике молча отключит право. Случайное совпадение слов может выдать его не тому человеку.
Что сделать при переезде на группы SharePoint
- Под каждый набор прав завести группу на сайте данных (
/sites/requests). - В коде проверять членство по Id группы, а не по Title, как уже сделано
в
reportsAccess.tsиtesterGroupAccess.ts. - Проверка должна учитывать отладочную подмену личности (
effectiveUserEmail, см.reportsAccess.ts). Иначе под подменой будут проверяться права настоящего пользователя. - Обновить эту таблицу.
Известные ограничения
- Замена активного исполнителя (подбор). Если прежний исполнитель держит
заявку открытой и, не обновив страницу, нажмёт «Выполнено», решение
запишется в шаг, который уже принадлежит новому исполнителю. При решении
пока не перепроверяется, что шаг всё ещё за этим человеком
(
ApproverService.decide).