fix: check report access with the user id of the lists site

The user id differs per site, so the id from the page context showed
"Нет доступа" in reports when the page was not on /sites/stroy.
The id and the photo folder path now come from settings.siteUrl.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-10-19 16:17:56 +05:00
parent cb810972c4
commit f0272c2170
10 changed files with 97 additions and 19 deletions
+11 -2
View File
@@ -2,6 +2,7 @@ import { WebPartContext } from '@microsoft/sp-webpart-base';
import { IHttpClient } from './http/IHttpClient';
import { createAadClient, createSharePointClient } from './http/spfxClients';
import { DATAVERSE_URL, SITE_URL, TNSU_API_BASE_URL, TNSU_API_RESOURCE_ID } from '../config/constants';
import { createCurrentUserIdProvider } from './siteUser';
/** Настройки подключения из property pane (пустое значение — берётся значение по умолчанию). */
export interface IConnectionSettings {
@@ -34,6 +35,12 @@ export interface IAppServices {
tnsuApi: IHttpClient;
settings: IResolvedSettings;
page: IPageInfo;
/**
* Id текущего пользователя на сайте со списками (settings.siteUrl). Id пользователя у каждого сайта
* свой: legacyPageContext.userId — это id на сайте страницы, и в workbench корневого сайта он не
* совпадает с id в «Доступах» сайта stroy. Запрашивается один раз.
*/
getCurrentUserId: () => Promise<number>;
}
function withoutTrailingSlash(url: string): string {
@@ -60,11 +67,13 @@ function readPageInfo(context: WebPartContext): IPageInfo {
export function createAppServices(context: WebPartContext, settings: IConnectionSettings): IAppServices {
const resolved = resolveSettings(settings);
const sharePoint = createSharePointClient(context);
return {
sharePoint: createSharePointClient(context),
sharePoint,
dataverse: createAadClient(context, resolved.dataverseUrl),
tnsuApi: createAadClient(context, TNSU_API_RESOURCE_ID),
settings: resolved,
page: readPageInfo(context)
page: readPageInfo(context),
getCurrentUserId: createCurrentUserIdProvider(sharePoint, resolved.siteUrl)
};
}