Мультивыбор (стол, кресло, тумбочка, канцелярия, другое) с полем своего значения при «Другое». Необязательный; руководитель на своём шаге правит его наравне с ПО и доступами. Хранится в WorkplaceFurnitureJson/WorkplaceFurnitureOther и уходит в маршрут (fieldValues), чтобы шаг исполнения «по мебели» мог назначаться условием в админке. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
12 KiB
Особые права в портале — реестр
Здесь собраны все места, где кому-то выданы права сверх обычных. Обычные права такие: автор правит свою незавершённую заявку, согласующий или исполнитель решает на своём активном шаге.
Многие права пока выданы по email или по должности прямо в коде. Это временно: план — переехать на группы SharePoint. Этот файл нужен, чтобы при переезде, смене сотрудника или разборе «почему у него есть или нет кнопки» ничего не потерять.
Правило. Добавили, изменили или убрали особое право — поправьте таблицу ниже в том же коммите.
Сводная таблица
| Право | Кто | Как определяется | Где действует | Файл с проверкой |
|---|---|---|---|---|
| Удалять согласующих, которые ещё ждут очереди | Алтынай Бултурукова, Павел Горбенко | email в коде | Подбор, Приём, Реферальная рекомендация: и при составлении, и в поданной заявке | shared/approval/routeEditRights.ts → canEditRoute |
| Удалять любых согласующих при составлении заявки | те же (canEditRoute) |
email в коде | Все остальные формы с маршрутом согласования (отпуск, увольнение, 1С и т. д.); в поданной заявке — нет | shared/approval/routeEditRights.ts → composeRemoveRowRule |
| Добавлять и удалять исполнителей при составлении заявки | те же (canEditRoute) |
email в коде | Все формы, где в маршруте из админки есть фаза исполнения; в поданной заявке — нет | shared/approval/routeEditRights.ts → canEditExecutors |
| Добавлять участников в поданную заявку: согласующего — пока идёт согласование, исполнителя — пока не завершено исполнение; встаёт в конец своего этапа со статусом «Ждёт очереди» | те же (canEditRoute) |
email в коде | Только Подбор и Приём | canEditRoute + shared/approval/routeStepAdd.ts (правило) + RecruitingSelectionView.tsx / RecruitingHireView.tsx |
| Менять местами шаги в поданной заявке (и согласующих, и исполнителей): только соседние шаги одной фазы, оба «Ждут очереди»; активный и пройденные шаги не двигаются | те же (canEditRoute) |
email в коде | Только Подбор и Приём | canEditRoute + shared/approval/queuedStepMove.ts (правило) + RecruitingSelectionView.tsx / RecruitingHireView.tsx |
| Заменять и удалять исполнителей, в том числе активного («На исполнении») | Алтынай Бултурукова | тот же email (canEditRoute) |
Только Заявка на подбор, матрица «Исполнение» | canEditRoute + forms/RecruitingSelection/RecruitingSelectionView.tsx |
| То же в поданной заявке: заменять и удалять невыполненных исполнителей, в том числе активного и себя | Исполнители заявки, у которых свой шаг исполнения ещё не выполнен | роль в маршруте (фаза «Исполнение»), без списка email | Только Заявка в отдел 1С | forms/Ticket1C/useExecutorEditing.ts |
| Править все поля и вложения заявки (добавлять и удалять файлы) на своём активном шаге согласования | Алтынай Бултурукова | 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
- Под каждый набор прав завести группу на сайте данных (
/sites/requests). - В коде проверять членство по Id группы, а не по Title, как уже сделано
в
reportsAccess.tsиtesterGroupAccess.ts. - Проверка должна учитывать отладочную подмену личности (
effectiveUserEmail, см.reportsAccess.ts). Иначе под подменой будут проверяться права настоящего пользователя. - Обновить эту таблицу.
Известные ограничения
- Замена активного исполнителя (подбор, 1С). Если прежний исполнитель держит
заявку открытой и, не обновив страницу, нажмёт «Выполнено», решение
запишется в шаг, который уже принадлежит новому исполнителю. При решении
пока не перепроверяется, что шаг всё ещё за этим человеком
(
ApproverService.decide).