docs: реестр особых прав портала
Все места, где права выданы сверх обычных (по email, должности, группе SharePoint или в админке approval-route), собраны в одну таблицу с файлами проверок — чтобы не потерять их при переезде на группы SharePoint или смене сотрудника. Ссылка добавлена в docs/forms.md. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
## Что НЕ дублируем в карточке (лежит в других местах)
|
||||
- Колонки списков → `forms/<Форма>/provisioning.json`.
|
||||
- Параметры ссылок (rptype/rpmode/rpid/rpsource) → [`routing.md`](./routing.md).
|
||||
- Особые права (кто что может сверх обычного, по email/должности/группе) → [`permissions.md`](./permissions.md).
|
||||
- Как обращаться к спискам SP из кода → [`sp-lists-frontend.md`](./sp-lists-frontend.md).
|
||||
- Общий жизненный цикл (черновик/upsert/блокировка/статусы), согласование, исполнение,
|
||||
печать — **одинаковы для всех форм** (общие примитивы `shared/ui` и `shared/approval`).
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
# Особые права в портале — реестр
|
||||
|
||||
Здесь собраны все места, где кому-то выданы права **сверх обычных**. Обычные
|
||||
права такие: автор правит свою незавершённую заявку, согласующий или исполнитель
|
||||
решает на своём активном шаге.
|
||||
|
||||
Многие права пока выданы **по email или по должности прямо в коде**. Это
|
||||
временно: план — переехать на группы SharePoint. Этот файл нужен, чтобы при
|
||||
переезде, смене сотрудника или разборе «почему у него есть или нет кнопки»
|
||||
ничего не потерять.
|
||||
|
||||
> **Правило.** Добавили, изменили или убрали особое право — поправьте таблицу
|
||||
> ниже в том же коммите.
|
||||
|
||||
## Сводная таблица
|
||||
|
||||
| Право | Кто | Как определяется | Где действует | Файл с проверкой |
|
||||
|---|---|---|---|---|
|
||||
| Удалять согласующих, которые ещё ждут очереди | Алтынай Бултурукова | email в коде | Подбор, Приём, Реферальная рекомендация: и при составлении, и в поданной заявке | `shared/approval/routeEditRights.ts` → `canEditRoute` |
|
||||
| Заменять и удалять исполнителей, **в том числе активного** («На исполнении») | Алтынай Бултурукова | тот же 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
|
||||
|
||||
1. Под каждый набор прав завести группу на сайте данных (`/sites/requests`).
|
||||
2. В коде проверять членство по **Id группы**, а не по Title, как уже сделано
|
||||
в `reportsAccess.ts` и `testerGroupAccess.ts`.
|
||||
3. Проверка должна учитывать отладочную подмену личности (`effectiveUserEmail`,
|
||||
см. `reportsAccess.ts`). Иначе под подменой будут проверяться права
|
||||
настоящего пользователя.
|
||||
4. Обновить эту таблицу.
|
||||
|
||||
## Известные ограничения
|
||||
|
||||
- **Замена активного исполнителя (подбор).** Если прежний исполнитель держит
|
||||
заявку открытой и, не обновив страницу, нажмёт «Выполнено», решение
|
||||
запишется в шаг, который уже принадлежит новому исполнителю. При решении
|
||||
пока не перепроверяется, что шаг всё ещё за этим человеком
|
||||
(`ApproverService.decide`).
|
||||
Reference in New Issue
Block a user