⟨/⟩ 50_Domain/Access/Claim.cs

68 строк · в начало

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`).
            """;
    }
}