using System;
using Ban.Sdaid.Notation.Documents;
namespace Ban.Sdaid.Icd.Domain.Access
{
/// <summary>Ключ claim из контролируемого реестра — что за разрешение задаёт claim-значение.</summary>
[DomainEntity]
public class Claim
{
/// <summary>Идентификатор ключа.</summary>
public Guid Id { get; init; }
/// <summary>
/// Ключ: «icd/cqrs/command», «icd/cqrs/query» или «icd/ui». Контролируемый реестр,
/// пополняется только осознанным решением.
/// </summary>
public string Key { get; init; }
/// <summary>Пояснение: что означает значение под этим ключом.</summary>
public string Description { get; init; }
}
/// <summary>Описание доменной сущности <see cref="Claim"/>.</summary>
public class ClaimSpec : IDomainEntityDocument
{
public Type Entity => typeof(Claim);
public string Name => "Claim (ключ разрешения)";
public string Description =>
@"Контролируемый реестр ключей разрешений. Ключ задаёт вид разрешения; конкретное значение под ключом хранится в claim-значении функции.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
public static string S1_Purpose = """
## Назначение
Реестр ключей фиксирует, какие вообще бывают разрешения в Сервисе, и не даёт разъезжаться
их написанию. Это словарь, а не пользовательские данные.
| Ключ | Значение под ключом | Проверяется |
|---|---|---|
| `icd/cqrs/command` | имя класса команды или `*` | базовый командный хендлер |
| `icd/cqrs/query` | имя класса запроса или `*` | базовый запросный хендлер |
| `icd/ui` | `подсистема/ресурс/действие` или `*` | фронт (скрытие меню/действий) |
UI получает из профиля только значения ключа `icd/ui`; ключи `cqrs/*` фронту не отдаются.
""";
public static string S2_Invariants = """
## Инварианты
- Набор ключей — закрытый реестр; расширяется отдельным решением, не произвольно.
- Периметр-ключи (напр. признак неограниченной области) не вводятся: периметр вне охвата
(см. ADR-011).
""";
public static string S99_Related = $"""
## Связанные артефакты
- {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_011_AbacAuthorization)} — реестр ключей и модель проверки.
- {nameof(Ban.Sdaid.Icd.Arch.Tech.Angular.ADR_UI_011_Claims)} — UI-claims (ключ `icd/ui`).
""";
}
}