using System;
using System.Collections.Concurrent;

namespace AsbCloudWebApi;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class PermissionAttribute : Attribute
{
    public static ConcurrentBag<string> Registered { get; } = new();

    public string Name { get; set; } = null!;

    /// <summary>
    /// Проверка наличия у пользователя разрешения с именем "{ControllerName}.{http_method}".
    /// Пример автоматической генерации имени: "Message.get", где "Message" - имя контроллера MessageController.
    /// </summary>
    public PermissionAttribute() { }

    /// <summary>
    /// Проверка наличия у пользователя указанного разрешения.
    /// </summary>
    /// <param name="name">Имя разрешения (default = ControllerName.http_method)</param>
    public PermissionAttribute(string name)
    {
        Name = name;
        Registered.Add(name);
    }
}