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