Ограничение списка доступных файловых шаблонов на сервере
Ограничение списка доступных файловых шаблонов на сервере¶
Видимость файловых шаблонов для карточек и представлений определяется списком ролей, в которые должен входить пользователь. Если этого недостаточно и требуется запретить или разрешить видимость некоторых шаблонов в программном расширении, то используйте код из примера ниже. Пример показывает серверное расширение на инициализацию, которое переопределяет список шаблонов, добавляемых платформой по умолчанию.
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))
;