053ca9d8cd
Если согласующий из маршрута недоступен (отпуск и т.п.), инициатор может поставить на его шаг другого человека, пока заявка не отправлена. Шаг целиком (порядок, роль, SLA) сохраняется, удалить его по-прежнему нельзя — состав маршрута из админки остаётся гарантированным. Замена — общая операция useMatrixEditor.replace, кнопка подключена только в этой форме. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
65 lines
10 KiB
Markdown
65 lines
10 KiB
Markdown
# Особые права в портале — реестр
|
|
|
|
Здесь собраны все места, где кому-то выданы права **сверх обычных**. Обычные
|
|
права такие: автор правит свою незавершённую заявку, согласующий или исполнитель
|
|
решает на своём активном шаге.
|
|
|
|
Многие права пока выданы **по 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` |
|
|
| То же: **все поля и вложения**, но **не только на своём шаге**: достаточно быть в маршруте (согласование или исполнение), пока заявка «На согласовании» или «Выполнение» | Ербол Шаймерденов | email в коде (список по каждой форме) + участие в маршруте | **Только** Организация рабочего места | `shared/approval/fullEditRights.ts` → `canEditAllFields` + `forms/WorkplaceSetup/useApproverRights.ts` |
|
|
| Заменять человека на шаге согласования (не удалять шаг) **до отправки**: новая заявка, черновик, доработка | Любой инициатор | право по статусу заявки (форма редактируема) | **Только** Организация рабочего места | `forms/WorkplaceSetup/WorkplaceSetupForm.tsx` (`canReplaceRow`) + `useMatrixEditor.replace` |
|
|
| Заполнять «Необходимое ПО» и «Доступы» на своём шаге согласования | Первый шаг маршрута согласования (по маршруту — непосредственный руководитель) | порядок шага в маршруте | Организация рабочего места | `forms/WorkplaceSetup/useApproverRights.ts` (`canEditReviewFields`) |
|
|
| Править оклад на ИС, оклад после ИС, «Отдел/Участок» на своём шаге согласования | Начальник расчётной группы (сейчас Ким Анна) | должность шага: «начальник/руководитель» + «расчет» | Заявка на приём | `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
|
|
|
|
1. Под каждый набор прав завести группу на сайте данных (`/sites/requests`).
|
|
2. В коде проверять членство по **Id группы**, а не по Title, как уже сделано
|
|
в `reportsAccess.ts` и `testerGroupAccess.ts`.
|
|
3. Проверка должна учитывать отладочную подмену личности (`effectiveUserEmail`,
|
|
см. `reportsAccess.ts`). Иначе под подменой будут проверяться права
|
|
настоящего пользователя.
|
|
4. Обновить эту таблицу.
|
|
|
|
## Известные ограничения
|
|
|
|
- **Замена активного исполнителя (подбор).** Если прежний исполнитель держит
|
|
заявку открытой и, не обновив страницу, нажмёт «Выполнено», решение
|
|
запишется в шаг, который уже принадлежит новому исполнителю. При решении
|
|
пока не перепроверяется, что шаг всё ещё за этим человеком
|
|
(`ApproverService.decide`).
|