Перейти к содержанию

Ограничение списка доступных файловых шаблонов на сервере

Ограничение списка доступных файловых шаблонов на сервере

Видимость файловых шаблонов для карточек и представлений определяется списком ролей, в которые должен входить пользователь. Если этого недостаточно и требуется запретить или разрешить видимость некоторых шаблонов в программном расширении, то используйте код из примера ниже. Пример показывает серверное расширение на инициализацию, которое переопределяет список шаблонов, добавляемых платформой по умолчанию.

using System.Collections.Generic; using System.Threading.Tasks; using Tessa.Extensions.Platform.Shared.Cards; using Tessa.Platform.Initialization; using Tessa.Platform.Storage;

public sealed class MyFileTemplatesServerInitializationExtension : ServerInitializationExtension { public override async Task AfterRequest(IServerInitializationExtensionContext context) { if (!context.RequestIsSuccessful) { return; }

Dictionary<string, object> fileTemplates = await FileTemplateHelper.GetAvailableFileTemplatesAsync(context.DbScope, context.Session, context.CancellationToken);

if (fileTemplates.Count == 0) { return; }

// здесь можно взять текущего пользователя context.Session, список шаблонов fileTemplates, // и удалить из него те шаблоны, которые не должен видеть пользователь

// в каждом из значений object внутри fileTemplates лежит Dictionary<string, object> с информацией по шаблону, // где по ключам из констант в FileTemplateHelper размещены соответствующие свойства; // например, storage[FileTemplateHelper.IDKey] содержит идентификатор карточки шаблона (Guid)

// теперь добавляем обработчик; поскольку мы это делаем в расширениях .WithOrder(BeforePlatform), // то платформа не перезапишет наш обработчик своим

context.AddHandler( InitializationHandlers.FileTemplates, async (ctx, stream) => { byte[] data = fileTemplates.ToSerializable().Serialize(); await stream.WriteAsync(data, 0, data.Length, ctx.CancellationToken); }); } }

Расширение регистрируется следующим образом. Обязательно надо указать .WithOrder(BeforePlatform), чтобы платформа не заменила наш обработчик шаблонов на стандартный.

extensionContainer .RegisterExtension<IServerInitializationExtension, MyFileTemplatesServerInitializationExtension>(x => x .WithOrder(ExtensionStage.BeforePlatform, 1) .WithSingleton() .WhenApplications(ApplicationIdentifiers.TessaClient)) ;

Back to top