import { WebPartContext } from '@microsoft/sp-webpart-base'; import { effectiveUserEmail } from '../impersonation'; /** * Кто может удалять согласующих из маршрута (и при составлении заявки, и на * своём шаге согласования) — сверх обычных прав инициатора/согласующего. * * Пока фиксированный email одного человека (Алтынай Бултурукова, начальник * отдела подбора и адаптации персонала) — группы SharePoint для этого ещё * нет, заведут отдельно (см. [[request-portal-approver-field-rights]] в * памяти). ВРЕМЕННО, как и reportsAccess.ts. * * Подключено только в 3 формах рекрутинга (Заявка на подбор, Заявка на прием, * Реферальная рекомендация) — каждая форма сама решает, передавать ли * canRemoveRow в ApprovalMatrix; здесь только сама проверка личности. */ const ROUTE_EDITOR_EMAILS: ReadonlySet = new Set([ 'a.bulturukova@tnsu.kz', // Алтынай Бултурукова 'gorbenko.pavel@tnsu.kz' // Павел Горбенко — составляет свой маршрут при подаче (обкатка форм) ]); /** Может ли этот email удалять согласующих из маршрута (см. описание выше). */ export function canEditRoute(email: string | undefined): boolean { return !!email && ROUTE_EDITOR_EMAILS.has(email.trim().toLowerCase()); } /** * Правило для ApprovalMatrix.canRemoveRow при СОСТАВЛЕНИИ заявки: редактор маршрута удаляет * любого согласующего, остальным кнопки удаления нет. Удаление тут чисто локальное — при * отправке маршрут целиком пишется из строк матрицы, поэтому записи на сервер не нужно. * В поданной заявке так нельзя: там своя реализация (см. RecruitingHireView). */ export function composeRemoveRowRule(email: string | undefined): (() => boolean) | undefined { return canEditRoute(email) ? () => true : undefined; } /** * Может ли текущий пользователь править состав ИСПОЛНИТЕЛЕЙ (добавлять и удалять) * при составлении заявки: те же редакторы маршрута, что и для согласующих. * Исполнителей по умолчанию назначает маршрут из админки, заявителю они только * показываются; редактору маршрута матрица «Исполнение» становится редактируемой. * Учитывает подмену личности (effectiveUserEmail). readOnly — заявка уже не * редактируется (отправлена), тогда править нельзя никому. */ export function canEditExecutors(context: WebPartContext, readOnly: boolean): boolean { return !readOnly && canEditRoute(effectiveUserEmail(context)); }