Files
request-portal/src/webparts/requestPortal/shared/approval/routeEditRights.ts
T
gorbenko.pavel 637e51d7f9
Tests / frontend-test (push) Successful in 1m24s
Feature/vacation edo signing (#23)
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/23
2026-10-05 08:53:18 +00:00

48 lines
3.4 KiB
TypeScript

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<string> = 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));
}