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

Создание проектного менеджера прав на создание токена доступа к файлам по внешней ссылке

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

Рассмотрим реализацию поддержки создания внешних временных ссылок для типа карточки “Автомобиль”, используемого для тестирования возможностей платформы.

Для этого в проекте Tessa.Extensions.Server создайте директорию Files.
В этой директории создайте файл AbFileContentPermissionManager.cs следующего содержимого:

using System; using System.Threading; using System.Threading.Tasks; using Tessa.Content.Files; using Tessa.Platform; using Tessa.Platform.Validation;

namespace Tessa.Extensions.Server.Files { /// <summary> /// Custom implementation of <see cref="IFileContentPermissionManager"/> for Car card type. /// </summary> [Order(10)] public sealed class AbFileContentPermissionManager : IFileContentPermissionManager { #region Fields

private static readonly Guid carTypeID = new (0xd0006e40, 0xa342, 0x4797, 0x8d, 0x77, 0x65, 0x01, 0xc4, 0xb7, 0xc4, 0xac);

#endregion

#region IFileContentPermissionManager Implementation

/// <inheritdoc/> public ValueTask<bool> CanApplyFileLinkPermissionsAsync( IFileContentLinkPermissionContext context, CancellationToken cancellationToken = default) => new(context.CardTypeID == carTypeID);

/// <inheritdoc/> public ValueTask<(bool Success, ValidationResult Result)> CanCreateFileLinkAsync( IFileContentLinkPermissionContext context, CancellationToken cancellationToken = default) => new((true, ValidationResult.Empty));

#endregion } }

Note

Атрибут Order позволяет управлять последовательностью применения менеджеров. Если требуется, чтобы менеджер был применён до типового решения, то нужно задать порядок меньше 1.

В методе CanApplyFileLinkPermissionsAsync проверяется тип карточки и, если он соответствует ожидаемому (“Автомобиль”), выдаётся разрешение на применение этого менеджера.

В методе CanCreateFileLinkAsync выдаётся разрешение на создание ссылки. Дополнительных проверок типа карточки не требуется, поскольку он уже был проверен в CanApplyFileLinkPermissionsAsync.

Important

При итоговом расчёте прав будут учтены права, выданные первым по порядку (атрибут Order) менеджером, применимым для данного типа карточки.

Далее необходимо создать файл Registrator.cs для регистрации менеджера со следующим содержимым:

using Tessa.Content.Files; using Unity;

namespace Tessa.Extensions.Server.Files { [Registrator] public sealed class Registrator : RegistratorBase { public override void RegisterUnity() { this.UnityContainer .RegisterSingleton<IFileContentPermissionManager, AbFileContentPermissionManager>(nameof(AbFileContentPermissionManager)) ; } } }

Important

Регистрация проектного менеджера IFileContentPermissionManager в Unity должна быть именованной.

Back to top